gpt4 book ai didi

Swift GameplayKit 在不暂停场景的情况下暂停 GKAgent

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:54 25 4
gpt4 key购买 nike

暂停 GKAgent 的最佳方法是什么?

我的游戏在某些级别使用了一些代理,我需要在我的游戏暂停/gameOver 时暂停它们。

我不会在我的游戏中暂停整个 SKScene,而是暂停一个 worldNode,因为即使在游戏暂停时,它也能让我更灵活地显示 spriteKit 内容。

我正在使用

 updateWithDeltaTime...

更新代理行为并相应移动它们的方法。

我考虑过停止更新方法,但代理仍会移动到他们最后已知的 GKGoal。

目前我找到的最佳解决方案是在我的游戏暂停时将代理速度/最大速度设置为 0。我在这里遇到的问题是,恢复后将速度重置为代理以前的速度有点痛苦,尤其是在使用多个具有自己行为的代理时。它们似乎也消失了,而不是在恢复时重新出现。

据我所知,没有 agent.paused 方法或类似的方法。

在不暂停 SKScene 本身的情况下暂停代理的好方法是什么?

感谢您的帮助和建议。

最佳答案

我想我现在找到了一个似乎可行的解决方案。

首先,我会在游戏暂停时停止 udapteDeltaMethods。

我查看所有实体并将代理委托(delegate)设置为 nil

  for entity in baseScene.entityManager.entities {
if let soldier = entity as? BossWorld3Soldiers {
soldier.agentComponent.delegate = nil
}
}

当我重新开始游戏时,我称之为

  for entity in baseScene.entityManager.entities {
if let soldier = entity as? BossWorld3Soldiers {
let action1 = SKAction.waitForDuration(0.5)
let action2 = SKAction.runBlock({ soldier.resetAgentDelegate() })
baseScene.runAction(SKAction.sequence([action1, action2]))
}
}

resetAgentDelegate() 方法只是我的实体类中用于重置代理委托(delegate)的便捷方法

 func resetAgentDelegate() {
self.agentComponent.delegate = self
}

在重置代理委托(delegate)之前,我在恢复时使用了轻微的延迟,因为如果没有延迟,实体/代理似乎会在恢复其 GKGoals 之前进行大量跳跃/消失几秒钟。

关于Swift GameplayKit 在不暂停场景的情况下暂停 GKAgent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35580132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com