Рандомизация 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 рандомизируется каждый раз, когда выполняется действие, и положение устанавливается в соответствии с этим.