1

flashPosX の値を変更する方法を教えてください。changeFlashPosX の「ログ」は正常に機能しますが、値は変更されません。

-(void)changeFlashPosX{
    CCLOG(@"change");
    flashPosX = random() % 300;
    CCLOG(@"rando : %f", flashPosX);
}

-(void)animFlash{
    CCScaleTo *to1 = [CCScaleTo actionWithDuration:.2 scale:1];
    CCScaleTo *to0 = [CCScaleTo actionWithDuration:.6 scale:0];
    CCMoveTo *moveTo = [CCMoveTo actionWithDuration:0.1 position:ccp(flashPosX, flash.position.y)];
    CCCallFunc *callChange = [CCCallFunc actionWithTarget:self selector:@selector(changeFlashPosX)];
    CCSequence *seq = [CCSequence actions:to1, to0, callChange, moveTo, nil];
    //CCAction *repeatSeq = [CCRepeatForever actionWithAction:seq];
    CCRepeatForever *repeatSeq = [CCRepeatForever actionWithAction:seq];
    [flash runAction:repeatSeq];
}

出力 :

rando : 164.000000
change
rando : 217.000000
change
rando : 241.000000
change
rando : 75.000000
4

1 に答える 1

1

これを試して:

CCMoveTo *moveTo = [CCMoveTo actionWithDuration:0.1 position:ccp(random() % 300, flash.position.y)];

それが機能する場合、問題は変数のスコープおよび/または保持にあるflashPosXか、またはによって呼び出されるルーチンループにありCCSequenceます。

また、これを試してください:

CCRepeatForever *repeatSeq = [CCRepeatForever actionWithAction:seq];
于 2012-08-15T06:40:03.740 に答える