6

私はlibgdxフレームワークを使用してAndroidゲームを持っています

Google Play ストアに次のレポートがあります。

java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1085)
at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1043)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1369)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1123)

私は何ができますか?

報告されたデバイス: Samsung GT-S5830i、Samsung galaxy Y、LGE LG-P990、Motorola Photon 4G、Motorola Droid X2、

4

3 に答える 3

6

この問題は以前にここで報告されています。すでに問題が提出されています。

この問題の詳細を提供していただけると助かります。

于 2012-06-04T04:41:21.863 に答える
0

最後の編集での解決策。


実際、ローエンドのデバイスでも発生しました (GT-S5830およびGT-S5830i)。

問題は、メモリ不足のために発生しなかったことです。ゲームの現在のメモリ使用量をログに記録しましたが、空き RAM が 80 メガバイト以上あるにもかかわらず、3 メガバイトを超えませんでした。私もSystem.gc()一貫して実行しました。これは、ガベージコレクターが RAM スペースを解放することを示唆しています。

回避策はありませんが、見つけ次第この回答を更新します。


いくつかの検索の後、GPU 関連のもの (テクスチャなど) はガベージ コレクターによって管理されません (そのため、手動で破棄する必要があります)。だから、呼び出しSystem.gc()はどういうわけか無意味です。それでも、すべてのテクスチャを破棄しており、ゲームのメモリ使用量はかなり少なくなっています。


私はあらゆる種類の解決策を試しましたが、何も機能しませんでしたが、問題を解決する必要があるものがあります(これは試していませんが、それでも機能するはずです):

  1. あまりにも多くのテクスチャを何度もロードしないでください。私のゲームでは、ユーザーが画面から離れるたびに、すべてのテクスチャを破棄してから初期化していました。それが問題を引き起こしている可能性があります。必要なことは、ロードされたテクスチャ/テクスチャ アトラスをメモリに保持することです (それらの参照を失わないでください)。そうすれば、画面に戻ってもすべてのテクスチャがリロードされません。

  2. rawTextureの使用を避け、代わりにPOT (Power Of Two) TextureAtlasを使用します。

この 2 つの手順を自分のプロジェクトに適用します。問題が解決したら、解決策を確認するために戻ってきます。


それはまったく問題ではありませんでした。テクスチャの破棄とロードの非常に長いループを実行しましたが、例外/エラーはスローされませんでした。私の上記の提案は解決策ではありません。問題はおそらく過度のScreen切り替えに関連していますが、この問題は画面の向きを縦モードから横モードに、またはその逆に繰り返し変更するときにも発生するため、そうではないと思います.


解決:

私は's の呼び出しは自動的に 's だと思っていました (そうではありません) Game。基になるテクスチャをすべて破棄するために使用されました。オーバーライドされたメソッドを呼び出すことで、問題を解決しましたsetScreen(screen)Screendispose()dispose()dispose()Screenhide()

sを使用TextureAtlasすることは非常に重要です。これは、各 にアタッチされているハンドルの量Textureを減らすためです。(これが EGL_SUCCESS エラーの原因である可能性があります)

GT-S5830GT-S5830i(Samsung Galaxy Ace および Samsung Galaxy Y)の両方でテスト済み。問題は発生しなくなりました。

于 2017-04-30T07:07:38.450 に答える