我有一个产生敌人的序列,然后将它们移动到屏幕上,它基本上是
moveAndRemoveEnemy = SKAction.sequence([moveEnemy, removeEnemy])
enemy.runAction(moveAndRemoveEnemy)
问题是我想在序列中添加另一个动作,在删除敌人后更新分数。我尝试制作一个单独的方法来增加分数,将其称为SKAction.runBlock()并将其插入序列中,如
let updateScore = SKAction.runBlock { self.increaseScore() }
moveAndRemoveEnemy = SKAction.sequence([moveEnemy, removeEnemy, updateScore])
enemy.runAction(moveAndRemoveEnemy)
但这不起作用。我认为它不起作用的原因是因为需要使用“self”调用该方法,如
self.runAction(increaseScore)
我已尝试将敌人产卵并转移到单独的方法中,然后使用
self.runAction(moveAndRemoveEnemy)
但这导致问题自行反转,因此updateScore可以正常工作,但敌人不会产生。不幸的是,我尝试了其他方法来提高分数,并且他们确实工作了一段时间,但根据我的游戏设置方式,他们最终会随着关卡变得更难而崩溃。有没有人知道这方面的任何方法?任何帮助深表感谢。
答案 0 :(得分:1)
您可以查看SKNode的runAction:completion:方法。这将在操作完成后调用completion()
。
或者,在Swift中:runAction(_ action: SKAction!, completion block: (() -> Void)!)
。
答案 1 :(得分:1)
如果removeEnemy
从场景中删除enemy
,则操作将停止,因为正在执行操作的节点必须在场景中才能继续运行操作。如果您将序列的顺序更改为[moveEnemy, updateScore, removeEnemy]
,则会调用updateScore
。
答案 2 :(得分:1)
对于那些感兴趣的人,最终的解决方案是:
enemy.runAction(moveAndRemoveEnemy, completion: {self.runAction(updateScore)})