У меня есть такой код:
@implementation MyScene {
SKAction *delayAction;
}
Inside a method:
delayAction = [SKAction waitForDuration:3.0];
[self runAction:[SKAction repeatActionForever: [SKAction sequence:
@[delayAction, [SKAction ...]]]]]
withKey:@"myKey"];
Затем я хочу уменьшить продолжительность сверхурочной работы. (Этот метод вызывается при обновлении :) Итак, я попробовал:
- (void)updateVelocity
{
NSLog(@"duration:%f",delayAction.duration);
delayAction.duration = delayAction.duration - 0.001;
}
И я получаю:
2014-04-04 11:45:05.781 FlyFish[5409:60b] duration:1.300000
2014-04-04 11:45:05.785 FlyFish[5409:60b] duration:1.299000
2014-04-04 11:45:05.800 FlyFish[5409:60b] duration:1.298000
2014-04-04 11:45:05.816 FlyFish[5409:60b] duration:1.297000
Что кажется хорошим, но мое [SKAction ...] продолжает повторяться через 3 секунды.
2 ответа
Я бы сделал это по-другому. Что-то вроде этого...
- (void)recursiveActionMethod
{
if (some end condition is met) {
return;
// this allows you to stop the repeating action.
}
self.duration -= 0.01;
// store duration in a property
SKAction *waitAction = [SKAction waitForDuration:self.duration];
SKAction *theAction = [SKAction doWhatYouWantHere];
SKAction *recursiveAcion = [SKAction performSelector:@selector(recursiveActionMethod) onTarget:self];
SKAction *sequence = [SKAction sequence:@[waitAction, theAction, recursiveAction]];
[self runAction:sequence];
}
Это выполнит ваше действие, а затем вернется к этой функции для повторного запуска с другим ожиданием, снова и снова, и снова ...
Вы даже можете остановить последовательность, задав некоторое конечное условие, которое перескочит внутрь блока if и остановит цикл.
Я немного опоздал, но вместо этого вы можете установить действие SKActionTimingEaseOut. Также это родной язык и должен работать немного быстрее. (Хотя вы не можете настроить изменения скорости) Это можно сделать аналогично этому:
yourSKAction.timingMode = SKActionTimingEaseOut;
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.