Как получить обратный вызов от повторяющегося действия SpriteKit, когда спрайт достигает конца пути?

Я создал свой SKAction таким образом:

unicornAction = [SKAction followPath:mypath asOffset:NO orientToPath:YES duration:0.1];

и добавил его в свой SKSprite:

[sprite runAction:[SKAction repeatActionForever:unicornAction] withKey:@"move"];

Я делаю это для того, чтобы в любой момент можно было регулировать скорость движения спрайтов по пути.

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

Кроме того, есть ли лучший способ использовать SKAction для выполнения того, что я пытаюсь сделать, позволяя мне изменять скорость в любом месте во время выполнения действий?


person Andrew    schedule 29.10.2013    source источник


Ответы (2)


Вы можете использовать последовательность с runBlock или PerformSelector в конце:

SKAction* sequence = [SKAction sequence:@[unicornAction, [SKAction runBlock:^{
    // code at end of path goes here...
}]];

Вы также можете использовать

[sprite runAction:sequence withKey:@"follow path"];

а затем получить действие по ключу:

SKAction* sequence = [sprite actionForKey:@"follow path"];
person LearnCocos2D    schedule 29.10.2013
comment
Это сработало намного лучше, чем я думал. Спасибо! - person Andrew; 30.10.2013

Создайте второй runBlock: действие, которое делает все, что вы хотите, когда действие завершается, затем создайте последовательность: действие с вашим followPath и заблокируйте завершающие действия. Если вы не хотите использовать блок, есть еще действие PerformSelector:onTarget:.

https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKAction_Ref/Reference/Reference.html

person jsd    schedule 29.10.2013