我有一個GKAgent2D,用於控制向目的地移動的SKNode敵人的移動。當場景暫停時,GameplayKit不會暫停
當我暫停代理進入的SKScene時,敵人節點似乎繼續移動而不顯示這種移動。所有可見的動作停止(敵人停止移動)。如果我等待5秒鐘,然後解除暫停場景,就好像敵人從未停止移動,並且它會彈出到原本沒有暫停場景的地方,並且它會繼續像往常一樣從該點移開。
我查看了Apple爲用戶創建的示例演示遊戲,名爲DemoBot,它們通過簡單地將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
..
UPDATE 2:
:即停止劑冷字面上除去劑系統目的的唯一解決方案這是一個非常難過的解決方案,因爲我希望有一種更優雅/適當的方式來停止目標,而不是完全從場景中刪除所有內容。然而,另一個問題是即使在這種情況下,如果沒有發生暫停,重置暫停後暫停的目標會產生相同的跳到他們所處位置的問題。
那是code * your *'update'方法還是Apple's?我們需要看到你的幫助。 – andyvn22
我已更新我的帖子來回答你的問題。它是*我的*代碼。 –
Sprite Kit暫停已被竊聽,我將猜測同一個bug在遊戲玩法套件中進行。如果您的場景暫停並且未被暫停,那麼您的所有孩子都會暫停並取消暫停。覆蓋場景中已暫停的變量,並讓setter未設置屬性的值 – Knight0fDragon