2012-08-15 62 views
1

你知道如何改變flashPosX的值嗎? 「日誌」 中changeFlashPosX工作正常,但該值不會改變:CCCallFunc的隨機值:值未更新?

-(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 

回答

1

試試這個:

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

如果成功,那麼問題與您的變量flashPosX的範圍和/或保留或者由CCSequence調用的例程循環相同。

而且,試試這個:

CCRepeatForever *repeatSeq = [CCRepeatForever actionWithAction:seq]; 
+0

順便說一下,您可能需要使用'arc4random()的''而不是random';你也提到你正在記錄,但請顯示在哪裏和結果日誌 – johnbakers 2012-08-15 06:40:50

+0

謝謝,所以我編輯我的帖子,輸出是正確的值,但「閃光燈」停留在完全相同的位置在X - axis ...它會一直重複,CCLOG工作正常 - 每次調用函數時隨機值都會改變,但不會影響動畫的位置... – Paul 2012-08-15 08:19:33

+1

其他人(包括我自己)發現的行爲並不總是最好的除了一次性事件。科科斯不是一個完美的圖書館。使用內置於Cocos中的'update'方法來調整需要連續變化的事物的位置要比依靠動作來實現這一點更加可靠。我會將你的例程移動到'update'中,並且每幀調整精靈的x位置一個小的隨機數。 – johnbakers 2012-08-15 08:22:45