2013-12-18 3 views
1

Я пытаюсь переместить спрайт по экрану слева направо. Спрайт должен начинаться с произвольной позиции y с правой стороны экрана. С repeatActionForever и целым числом со случайным числом Y, я хочу, чтобы спрайт повторил действие, начиная с разных y позиций. Любые идеи о том, как достичь этого, помимо помещения случайного int в метод обновления? Так или иначе, можно ли это сделать?Рандомизация SKActions

Я использую этот метод на 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

Вы можете поместить код, который генерирует случайное число в блоке, таким образом, он содержится в действии. – DogCoffee

ответ

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

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

+0

Спасибо, ребята, с использованием этого блока он работал сейчас – keptn

Смежные вопросы