我正在使用SpriteKit构建一个回合制游戏。这是一个人类玩家,而不是1+ CPU对手。
在CPU转动期间,我使用SKAction.sequence
来显示CPU正在做什么。这通常包含wait
操作,后跟自定义SKAction.run
块。
现在我遇到的部分问题是CPU可以每回合执行多次攻击操作,但在每次攻击任务后,我会重新计算是否应该再进行任何攻击因为征服一个国家可能会开辟新的攻击途径。我遇到的麻烦是我无法知道应该预先发生多少次攻击,并且由于最初的攻击本身就是一个块,它不知道它是否会产生更多的攻击。因此,我不知道如何在我的序列中添加额外的攻击步骤。
有没有人有任何想法我怎么能这样做?有人认为我实际上是在没有显示它们的情况下预先执行所有攻击,然后只是为了玩家的利益而重放它们。但我担心在这种情况下游戏似乎会悬而未决。
无论如何,我可以在正在运行的序列中途附加更多SKActions吗?
let sequence:[SKAction] = []
let attackTasks = actions.getAttackTasks()
if attackTasks.count > 0 {
sequence.append(SKAction.wait(forDuration:0.5))
sequence.append(SKAction.run {
//PerformAttackTask Here calls another recursive function which calculates and generates more attacks
self.performAttackTask(attackTask: attackTasks.first!)
self.combatFinished = false
})
}
let sequenceAction = SKAction.sequence(sequence)
node.run(sequenceAction)
答案 0 :(得分:0)
对于那些感兴趣的人,我最终改变了我的方法,将动画向下移动到performAttackTask
方法并递归调用自身。
然后我使用一个回调,只有在所有战斗完成后才会触发此回路。
这也使用带有完成处理程序的SKAction.run
然后进入下一组操作