#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"];
Чтобы подвести итог вышесказанному, проверьте эти:
- узел, который выполняет действие, объявлен в .h
- вы используете одну и ту же строку ключа для добавления и удаления действия
- вы пытаетесь вызвать removeActionForKey на том же узле, который объявлен в 1.
Надеюсь, это поможет!
Комментарии:
1. Смотрите мой обновленный вопрос. Я добавляю действие не к спрайту. Я добавляю это в свой SKScene. И я попытался удалить его с помощью [self removeActionForKey:@»levelTimerAction»];
2. Необходимо ли добавлять SKScene, поскольку вы можете создать простой узел и добавить это действие к этому невидимому узлу ..?
3. Спасибо, теперь это работает 🙂 Невидимый узел, который выполняет мои действия. Хм, эта бессмыслица имеет смысл
4. Если вы используете этот подход, он будет работать. Я сделал именно это прошлой ночью. В общем, лучше всегда использовать строку ключа, чтобы вы могли ссылаться на действие позже или выяснить, равно ли оно нулю (не все остальные). Это хорошая привычка. Вы можете создавать и извлекать константы NSString для своих ключей, помещать их в словари, массивы или наборы. Тогда многое сделать легко.