2017-02-22 11 views
0

在libgdx中,screen.setScreen()沒有自動調用處理權。在覆蓋的setScreen中,是否必須先撥打screen.dispose,然後致電super.setScreen或先致電稍後再撥打電話? 我知道這可能看起來像重複的問題,但我仍然想知道,因爲super.setScreen調用screen.hide。在dispose運行時安全後是否調用hide? 這是不好的做法嗎? 我正在製作一款基於thisthis示例的3D遊戲。 在這裏,我將GameName類擴展爲Game,並嘗試覆蓋setScreen,以便在屏幕不爲空時調用dispose,然後調用super.setScreen在LibGDX的Screen.dispose()之後調用Screen.hide()是否安全?

回答

0

screen.dispose()永遠不會被LibGDX調用。您必須在將參考放到屏幕前自行手動進行。如果您不打算重複使用Screen實例,請撥打撥打電話screen.dispose()是完美的地方。

screen.hide()永遠不會響應Android事件而被調用。

我不建議重寫game.setScreen()來處理屏幕,除非您確定不會重複使用任何屏幕實例。在大多數簡單的遊戲中,您確實想要重複使用它們,而不是浪費時間重複地卸載和重新加載資源。

0

兩種類型的一次性資產(SpriteBatch,Texture,Stage,...),其中一種在不同的屏幕上共享,另一種特定於特定的屏幕。

  1. 共享資產應該從遊戲的dispose()方法處置。

  2. 屏幕特定資產應通過dispose()屏幕的方法處理,但屏幕的dispose()從未調用,因此您需要明確調用它。

當你改變你的屏幕hide()調用,所以你應該從hide()方法調用dispose()方法屏幕的方法。

+0

但在Android中,當用戶接到電話或遊戲失去焦點時,hide會被調用。因此,在隱藏內部添加處理是個壞主意。 – Anutrix

+0

@Anutrix什麼認爲屏幕的hide()方法調用Android的hide()。兩者都是不同的方法。 – Aryan

+0

@Anutrix,不,它不。當遊戲失去焦點時,會調用'pause()',但不會'hide()'。 – Tenfour04

相關問題