2015-07-11 40 views
0

我的Android應用程序與LibGDX創建有問題。在第一次發佈後,遊戲中的部分紋理消失,只有在重新啓動後(不隱藏並重新打開)才能正常工作。在安裝後的第一次啓動後,它只發生一次。如果在安裝的應用程序上安裝,一切正常。LibGDX紋理在第一次啓動後的問題安裝後

我使用紋理的圖集,它是2048x2048。在項目中,我使用AssetLoader類和靜態對象。我看到了一些提示,這個問題可能是靜態的,但爲什麼部分紋理通常會加載?

如果有人有這種問題給出建議。

回答

0

我發現這個問題。它不在AssetLoader或紋理中。當我加載遊戲對象時,我還在電話資源中重新創建數據,所以當這些數據存在時,所有加載都很好,但如果是第一次,並且需要在手機上創建此數據,則會導致加載資源時出現問題。我只是將「重新創建數據」移到自己的功能上,現在一切正常。

0

這被稱爲上下文丟失。您加載和創建的紋理會在您隱藏時自動卸載,並且在隱藏和重新打開之間會丟失一些上下文。在隱藏後重新啓動或殺死活動應用程序會摧毀當前的JVM,並且當您再次打開它時,它將會重新啓動並且一切正常。

爲了避免這種情況,您可以通過覆蓋ApplicationListener類(這是您的主類繼承ApplicationListener)上的pause()和resume()方法來手動管理這種情況。您應該在暫停()時卸載/處理資產,並在resume()上重新加載/創建它們。

這不是最好的,但給一個想法,你可以有問題的在這裏看到一個實現「編輯:」部分:LIBGDX White textures in the first run on android

但我強烈建議,以避免靜電場,並使用AssetManager類加載並獲得紋理, TextureAtlases和其他資產。讓它爲你管理紋理。

看看:https://github.com/libgdx/libgdx/wiki/Managing-your-assets

+0

謝謝,但重寫暫停和恢復方法並沒有幫助.. 我的遊戲大部分已完成,AssetLoader類很龐大。我瞭解AssetManager並將其用於下一個項目。 我認爲,重寫並沒有幫助,因爲這種損失不會導致隱藏和重新打開後,但只在第一次啓動。之後,我可以隱藏和重新打開我的應用程序多次,因爲我可以,並且一切都會正常工作。 –

+0

另一個奇怪的事情是,我的店鋪屏幕加載總是很好,我可以改變遊戲對象的紋理,但是當我返回到菜單屏幕或遊戲屏幕,沒有任何變化。也許這是因爲AssetLoader.loadShop()我每次創建商店屏幕時使用,並且每當我關閉商店屏幕時處理它,但遊戲和菜單屏幕的對象只有在方法create()中AssetLoader.load()和方法中配置AssetLoader.dispose ()(現在也用你的建議暫停方法dispose()和恢復方法加載)。 所有的音樂,聲音和字體,甚至一些紋理,加載良好,並始終工作。 –

+0

您是否避開靜態字段? 您的店鋪屏幕加載總是很好,因爲正如您所說,您每次加載時都會再次創建它。 –