随机化SKActions

时间:2013-12-18 08:22:13

标签: sprite-kit skaction

我正试图在屏幕上从左到右移动一个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];

1 个答案:

答案 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)];
            }];

每次运行动作时随机化随机化,并根据该位置设置位置。