Остановить повторное действие навсегда в Sprite Kit

#ios #sprite-kit #skaction

#iOS #sprite-kit #skaction

Вопрос:

В моей игре я использую SKAction repeatActionForever: метод для периодического вызова какого-либо метода performSelector: . Как я видел, остановить это невозможно. Я пытался остановить с помощью removeActionForKey: или removeAllActions — безрезультатно. Я не хочу вызывать это действие рекурсивно, поэтому мне нужна помощь.

ОБНОВЛЕНИЕ: мой код SKAction

 levelTimer=[SKAction repeatActionForever:[SKAction sequence:@[[SKAction waitForDuration:30.0],[SKAction performSelector:@selector(moveToNextLevel) onTarget:self]]]];
[self runAction:levelTimer withKey:@"levelTimerAction"];
  

Комментарии:

1. Этот метод, похоже, ожидает действий с ключом.

Ответ №1:

repeatActionForever Метод должен вызываться на узле, на котором SKAction выполняется, поэтому:

  [sprite removeActionForKey:@"forevercalleraction"]; 
  

Предположим, вы добавили действие следующим образом, и sprite переменная не добавлена локально (объявлена в .h):

  [sprite runAction:repeatPerformSelectorAction withKey:@"forevercalleraction"];
  

Чтобы подвести итог вышесказанному, проверьте эти:

  1. узел, который выполняет действие, объявлен в .h
  2. вы используете одну и ту же строку ключа для добавления и удаления действия
  3. вы пытаетесь вызвать removeActionForKey на том же узле, который объявлен в 1.

Надеюсь, это поможет!

Комментарии:

1. Смотрите мой обновленный вопрос. Я добавляю действие не к спрайту. Я добавляю это в свой SKScene. И я попытался удалить его с помощью [self removeActionForKey:@»levelTimerAction»];

2. Необходимо ли добавлять SKScene, поскольку вы можете создать простой узел и добавить это действие к этому невидимому узлу ..?

3. Спасибо, теперь это работает 🙂 Невидимый узел, который выполняет мои действия. Хм, эта бессмыслица имеет смысл

4. Если вы используете этот подход, он будет работать. Я сделал именно это прошлой ночью. В общем, лучше всегда использовать строку ключа, чтобы вы могли ссылаться на действие позже или выяснить, равно ли оно нулю (не все остальные). Это хорошая привычка. Вы можете создавать и извлекать константы NSString для своих ключей, помещать их в словари, массивы или наборы. Тогда многое сделать легко.