Objective c CCCallFunc的随机值:值是否未更新?

Objective c CCCallFunc的随机值:值是否未更新?,objective-c,random,cocos2d-iphone,Objective C,Random,Cocos2d Iphone,您知道如何更改flashPosX的值吗?changeFlashPosX中的“日志”工作正常,但值不变: -(void)changeFlashPosX{ CCLOG(@"change"); flashPosX = random() % 300; CCLOG(@"rando : %f", flashPosX); } -(void)animFlash{ CCScaleTo *to1 = [CCScaleTo actionWithDuration:.2 scale: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
试试这个:

CCMoveTo *moveTo = [CCMoveTo actionWithDuration:0.1 position:ccp(random() % 300, flash.position.y)];
如果有效,那么问题要么在于
flashPosX
变量的范围和/或保留,要么在于
CCSequence
调用的例程循环

此外,请尝试以下方法:

CCRepeatForever *repeatSeq = [CCRepeatForever actionWithAction:seq];
试试这个:

CCMoveTo *moveTo = [CCMoveTo actionWithDuration:0.1 position:ccp(random() % 300, flash.position.y)];
如果有效,那么问题要么在于
flashPosX
变量的范围和/或保留,要么在于
CCSequence
调用的例程循环

此外,请尝试以下方法:

CCRepeatForever *repeatSeq = [CCRepeatForever actionWithAction:seq];

顺便说一下,您可能希望使用
arc4random()
而不是
random
;您还提到您正在记录日志,但请显示日志的位置和结果谢谢,因此我编辑了我的帖子,输出值正确,但“flash”在x轴上保持在完全相同的位置。。。它会永远重复,CCLOG工作正常-每次调用函数时,随机值都会改变,但动画的位置不会改变…其他人(包括我自己)发现,除了一次性事件之外,动作并不总是最好的。cocos不是一个完美的图书馆。使用Cocos中内置的
update
方法来调整需要不断更改的内容的位置要比依靠操作来调整位置可靠得多。我会将你的例程移动到
更新
中,并在每一帧调整精灵的x位置一个小的随机数。此外,我建议使用repeatForever事件进行简单的单动作,而不是序列。谢谢,好的,但位置不应该是“常量”,它必须是一个随机数。你还有别的想法吗?我有点被我的flash动画卡住了。但是,谢谢你的回答,我真的很感激。顺便说一下,你可能想用
arc4random()
而不是
random
;您还提到您正在记录日志,但请显示日志的位置和结果谢谢,因此我编辑了我的帖子,输出值正确,但“flash”在x轴上保持在完全相同的位置。。。它会永远重复,CCLOG工作正常-每次调用函数时,随机值都会改变,但动画的位置不会改变…其他人(包括我自己)发现,除了一次性事件之外,动作并不总是最好的。cocos不是一个完美的图书馆。使用Cocos中内置的
update
方法来调整需要不断更改的内容的位置要比依靠操作来调整位置可靠得多。我会将你的例程移动到
更新
中,并在每一帧调整精灵的x位置一个小的随机数。此外,我建议使用repeatForever事件进行简单的单动作,而不是序列。谢谢,好的,但位置不应该是“常量”,它必须是一个随机数。你还有别的想法吗?我有点被我的flash动画卡住了。但除此之外,谢谢你的回答,我真的很感激。