2012-08-15 65 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