Рандомизация SKActions

Я пытаюсь переместить спрайт по экрану слева направо. Спрайт должен начинаться со случайной y позиции на правой стороне экрана. С repeatActionForever и целым числом со случайным числом Y я хочу, чтобы спрайт повторил действие, начиная с разных позиций y. Любые идеи о том, как достичь этого, кроме помещения случайного 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 ответ

Решение

Невозможно рандомизировать стандартные действия после их определения и запуска. Но есть обходной путь, который вы можете использовать для достижения желаемого эффекта, используя [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)];
            }];

RandomY рандомизируется каждый раз, когда выполняется действие, и положение устанавливается в соответствии с этим.

Другие вопросы по тегам