CCActionSequence/CCActionDelay не задерживает каждое действие?
У меня есть функция, которая создает CCSprite и перемещает его по экрану:
func fireWeapon(target: CGPoint) {
let projectile = CCBReader.load("Projectile") as! CCSprite
projectile.position = player.position;
self.addChild(projectile);
let moveAction = CCActionMoveTo(duration: 1, position: target);
let delayAction = CCActionDelay(duration: 1);
let removeAction = CCActionCallBlock(projectile.removeFromParentAndCleanup(true));
projectile.runAction(CCActionSequence(array: [moveAction, delayAction, removeAction]));
}
Я пытаюсь очистить спрайты после того, как они закончат свое действие перемещения, выполнив removeFromParentAndCleanup() в последовательности с действием перемещения. Тем не менее, каждое действие запускается мгновенно после друг друга в последовательности без задержек. Спрайты очищаются сразу после создания. Почему не работают задержки? Я пробовал с и без действия CCDelay, и я получил тот же результат.
1 ответ
Решил мою собственную проблему. Оказывается, что я использовал неправильный синтаксис для CCActionCallBlock(), вы должны фактически заключить свой блок кода в функцию void, например, так:
func fireWeapon(target: CGPoint) {
let projectile = CCBReader.load("Projectile") as CCNode
projectile.position = player.position;
self.addChild(projectile);
let moveAction = CCActionMoveTo(duration: 1, position: target);
let delayAction = CCActionDelay(duration: 3);
let removeAction = CCActionCallBlock { () -> Void in
projectile.removeFromParentAndCleanup(true);
}
projectile.runAction(CCActionSequence(array: [moveAction, delayAction, removeAction]));
}
Надеюсь, это поможет многим людям, потому что я видел много с этой проблемой, и им никогда не предлагалось решение.