我正试图在屏幕上从左到右移动一个Sprite。精灵应该从屏幕右侧的随机y位置开始。使用repeatActionForever和一个随机Y数的整数,我希望精灵从不同的y位置开始重复动作。除了将random int放入更新方法之外,有关如何实现这一点的任何想法?无论如何通过行动可以实现吗?
我在Sprite上使用这个方法:
int randomY = (arc4random()%121;
SKAction *pos = [SKAction moveTo:CGPointMake((STAGESIZE.width+(self.size.width/2)),randomY) duration:0];
SKAction *move = [SKAction moveToX:0-self.size.width/2 duration:3];
SKAction *wait = [SKAction waitForDuration:1 withRange:5];
SKAction *sequence = [SKAction sequence:@[pos,move,wait]];
SKAction *repeater = [SKAction repeatActionForever:sequence];
[self runAction:repeater];
答案 0 :(得分:2)
一旦定义并运行,就无法对标准操作进行随机化。 但是有一种解决方法可以使用[customActionWithDuration]来达到预期的效果。1
SKAction* randomPositionAction = [SKAction customActionWithDuration:0 actionBlock:^(SKNode *node,CGFloat elapsedTime){
int randomY = arc4random_uniform(121);
//Set position instead of running action with duration 0
[node setPosition:CGPointMake((STAGESIZE.width+(self.size.width/2)),randomY)];
}];
每次运行动作时随机化随机化,并根据该位置设置位置。