【发布时间】:2016-02-23 14:26:02
【问题描述】:
暂停 GKAgent 的最佳方式是什么?
我的游戏在某些关卡中使用了一些代理,当我的游戏暂停/gameOver 时我需要暂停它们。
我不会在我的游戏中暂停整个 SKScene,而是暂停一个 worldNode,因为它让我可以更灵活地显示 spriteKit 内容,即使在游戏暂停时也是如此。
我正在使用
updateWithDeltaTime...
更新我的代理行为并相应移动它们的方法。
我考虑过停止更新方法,但代理仍会移动到他们最后一个已知的 GKGoal。
到目前为止,我发现的最佳解决方案是在游戏暂停时将代理速度/maxSpeed 设置为 0。我在这里遇到的问题是,在恢复时将速度重置为代理以前的速度有点痛苦,尤其是在使用具有自己行为的多个代理时。它们似乎也消失了,然后在恢复时重新出现。
据我所知,没有 agent.paused 方法或类似的方法。
在不暂停 SKScene 本身的情况下暂停代理的好方法是什么?
感谢您的任何帮助和建议。
【问题讨论】:
-
您是否尝试在 agentDidUpdate 中设置某些内容?类似于如果 gameIsPaused 跳转并且不更新节点位置?
-
我会试一试。我查看了苹果演示机器人示例,它们停止了代理的所有 updateWithDelta 方法。实际上我现在也设法做到了,但是在恢复时它们会发生巨大的跳跃,因此代理仍然没有正确暂停。再次感谢
-
我在我的游戏中添加了一个 DeadState,我也遇到了同样的问题,我尝试设置 agent.delegate = nil 和 self.removeComponentForClass 但 agentWillUpdate 和 updateWithDeltaTime(在我的类 MoveWanderAgent 中:GKAgent2D ) 仍然打电话。我发现的唯一方法是检查 updateWithDeltaTime 中的状态:如果 stateMachine.currentState 是 DeadState { behavior = StopBehavoir() return }。我增加了你的问题
-
是的,正是我的问题。我仍在尝试对 DemoBots 进行逆向工程,以了解 Apple 是如何做到的。应该有一个 agent.paused 方法。
-
肯定有比将行为设置为不移动更好的方法