2015-11-19 19 views
5

在SpriteKit的編程指南中,update()函數被稱爲實現自己的遊戲邏輯的最佳位置。 但自從我意識到在一個節點上集中攝像頭在didFinishUpdate()中工作得更好(避免延遲)時,我一直在使用該選項。爲什麼update()首選遊戲邏輯而不是didFinishUpdate?

camera.position.y = node.position.y 

害怕其他延遲問題我也實施了我的遊戲邏輯的其餘部分。有用。 因此,他們爲什麼推薦update()? 使用這兩種方法是否有性能優勢?

謝謝。

回答

5

沒有性能優勢,這確實是決定遊戲邏輯的先決條件。你想運行你的邏輯假設物理和行動WERE(didUpdate)計算或將是(更新)計算。例如,在處理任何物理和動作之前更新被調用。所以如果你有像自定義物理計算的邏輯,產生一堵牆來阻止一個物理體,甚至是簡單地執行一個你想要立即運行的動作,那麼應該在更新方法中完成,因爲所有這些情況都期望物理和動作將會在當前幀中計算。但是,在相機上居中放置一個節點對於didUpdate來說會很好,因爲在物理計算完成後,您需要將相機居中。

還需要注意的是,更新方法會傳遞當前的遊戲時間,所以您將需要使用更新方法來計算幀之間的時間(AKA增量時間)。通常需要做這樣的事情,例如計數N秒後執行邏輯或用可變時間步驟處理自定義物理。這不會將您限制爲更新方法,但是因爲您應該將當前增量時間保存在變量中,因此您可以通過didUpdate方法和其他回調來訪問它。

從個人經驗來看,我發現自己比didUpdate更多地使用update方法,因爲我經常會有很多自定義物理和邏輯,經常假設我所做的更改將在當前幀中處理完畢。但正如我上面所說,這取決於你的先決條件是什麼。在某些情況下,選擇什麼並不重要,因爲邏輯可能獨立於渲染週期。

我認爲這個來自Sprite Kit Documentation的圖像可以更容易地直觀地顯示重複循環。分析你的遊戲邏輯,並確定你的遊戲邏輯在週期的什麼時候有意義。 ​​