Переместите узлы спрайта после завершения SKAction

Я пытаюсь изменить положение своих спрайтов после завершения действия SKAction moveTo. Я запрограммировал врагов так, чтобы они появлялись на экране из (self.frame.size.width/2, 0). Они движутся только по оси Y. Я хочу переместить их в исходное положение, когда их y-позиция больше, чем (self.frame.size.height), и перемещать их снова и снова таким же образом, пока игрок не убьет всех врагов. Я борюсь с этим. Какую часть кода я должен добавить? Есть идеи? Этот код может помочь вам понять мою реализацию:

-(void) addEnemies {

for (int j = 0; j < 6; j++) {

   SKSpriteNode* enemy = [SKSpriteNode spriteNodeWithImageNamed:@"player"];
    enemy.position = CGPointMake(((self.frame.size.width) -20) - j * (enemy.frame.size.width) , 0);


    CGPoint realDest = CGPointMake((enemy.position.x), (self.frame.size.height));
    float velocity = 50/1.0;
    float realMoveDuration = self.size.height / velocity;
    SKAction * actionMove = [SKAction moveTo:realDest duration:realMoveDuration];
    [enemy runAction:actionMove];

    [self addChild:enemy];
}

}

person Aristotelis Ignatiadis    schedule 27.06.2014    source источник


Ответы (2)


  1. Создайте SKSpriteNode, который копирует крышу -> Rectangle(self.frame.size.width,1)
  2. Разместите его вдоль верхнего края экрана с нединамическим физическим телом.
  3. Установите «крышу» и врага, чтобы они контактировали друг с другом
  4. Вызовите метод для контакта, который сбрасывает эту позицию и вызывает SKaction

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

Вот пример того, как создать крышу и заставить врагов взаимодействовать с ней. https://stackoverflow.com/a/24195006/2494064

person meisenman    schedule 27.06.2014
comment
Не стесняйтесь оставлять комментарии с дальнейшими запросами. Связанный код протестирован и помог многим пользователям в подобных ситуациях. - person meisenman; 27.06.2014
comment
Это выглядит многообещающе. Я проверю это! Спасибо за ваш ответ :-) - person Aristotelis Ignatiadis; 29.06.2014

person    schedule
comment
Я так пробовал, но не получается... Враги даже не появляются на экране. - person Aristotelis Ignatiadis; 27.06.2014
comment
К сожалению ! это [враг runAction:actionMove завершение:^{ [self moveEnemyNode:враг]; }]; - person mihnea2kx; 27.06.2014
comment
Только что протестировано и работает как задумано. Если вы пропустите любого врага, дважды проверьте свои координаты - person mihnea2kx; 27.06.2014
comment
Да, я скучаю по 5 врагам. Теперь на экране появляется 1 враг. Я проверю координаты, как ты сказал! Спасибо! - person Aristotelis Ignatiadis; 27.06.2014