gpt4 book ai didi

ios - 场景暂停时 GameplayKit 不暂停

转载 作者:行者123 更新时间:2023-11-29 00:46:20 25 4
gpt4 key购买 nike

我有一个 GKAgent2D 来控制 SKNode 敌人向目的地移动。

当我暂停代理正在移动的 SKScene 时,敌人节点似乎继续移动而没有显示这种移动。所有可见的 Action 都停止(也就是敌人停止移动)。如果我等待 5 秒然后取消暂停场景,就好像敌人从未停止移动一样,它会突然跳到如果我没有暂停场景它应该在的位置,然后它继续从那个点正常移动。

我查看了 Apple 为用户创建的名为 DemoBots 的示例演示游戏,他们通过简单地保留 update:(NSTimeInterval *)currentTime 来实现与我正在使用的类似的“修复” > 有返回的方法。这是我的代码目前的样子:

- (void)update:(NSTimeInterval)currentTime {

[super update:currentTime];

if (_lastUpdateTime == 0) _lastUpdateTime = currentTime;

float delta = currentTime - _lastUpdateTime;
_lastUpdateTime = currentTime;

// Stop updating if the `worldNode` is paused.
if (worldNode.paused) { return };

for (GKComponentSystem *componentSystem in componentSystems) {
[componentSystem updateWithDeltaTime:deltaTime];
}

}

但我无法深入了解他们还做了什么来确保当前有效的 GKGoal 目标在暂停发生时立即停止。我什至记录了 agentDidUpdate 方法,当我暂停场景时它停止触发,所以我真的不确定它如何继续移动。

如果有人知道答案请告诉我。谢谢!

更新:我什至尝试暂停目标设置为移动的各个节点:

- (void)didPauseScene {

worldNode.paused = YES;

/*
<< Animations >>
*/

for (OEnemy *enemy /*my subclass*/ in enemyArray) {
enemy.paused = YES;
}
}

但这仍然没有阻止 GKGoals 继续进行,因为他们不会暂停场景..

更新 2:停止代理冷的唯一解决方案是从字面上删除代理系统目的:

if (worldNode.paused) {
self.agentSystem = nil;
return;
}

这是一个非常可悲的解决方案,因为我希望有一种更优雅/更合适的方法来停止目标,而无需从场景中完全删除所有内容。然而,即使如此,另一个问题仍然存在,在取消暂停时重置目标会产生相同的问题,即如果没有发生暂停,则会跳转到目标位置。

最佳答案

如果另一个目标没有改变,特工将继续沿着最后已知的有效速度前进。如果您希望代理停止,您可以尝试使用 GKGoal 的 goalToReachTargetSpeed:。

关于ios - 场景暂停时 GameplayKit 不暂停,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38569450/

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