2016-10-26 15 views
0

私は "Loading Screen"を使用しない/使用できないゲームを持っています。私はAssetManagerを使って、広告が表示されたあと、またはIAPプロセスが起こったときに資産をロードするのにいくつかの問題を抱えています。LibGDX AssetManagerと黒のテクスチャ&フォント

私はAssetManagerのwiki記事に従ってきましたが、「新しい」テクスチャを読み込もうとすると、まだ黒いテクスチャが表示されています。

私はSingletonカスタムGameAssetManagerを持っていますが、これはLibGDXのAssetManagerに委譲する便利なメソッドをいくつか持っています。例えば

:私の​​で

public Texture getTexture(String filename) { 
    if (assets.isLoaded(filename)) { 
     return assets.get(filename, Texture.class); 
    } else { 
     assets.load(filename, Texture.class); 
     assets.finishLoadingAsset(filename); 
     Texture texture = assets.get(filename, Texture.class); 
     sessionAssets.put(filename, texture); 
     return texture; 
    } 
} 

、私はそうのようなonResumeメソッドをオーバーライドします。

public void resume() { 
    assets = new AssetManager(); 
    Texture.setAssetManager(assets); 
} 

私が持っている:

@Override 
protected void onResume() { 
    super.onResume(); 
    GameAssetManager.instance.resume(); 
} 

GameAssetManager.resume()方法は、ちょうどこのありませんであるStoreItemButtonアイテムがGoogleのIABライブラリまたはAdによって購入されたときに、そのレイアウト/ UIコンポーネントを変更します。

広告が表示された後、またはIABプロセスが完了すると、AndroidLauncher.onResumeが呼び出され、ボタンが変更されるとそのUIまたはその一部が黒くなります。

ボタンごとに4つまで(最大30個のボタン)すべてのレイアウトを事前ロードしてから状況に応じて表示/非表示にすると動作するようですが、これは大変ですオーバーヘッドとエラーが発生しやすい理由はありません。

ここにお手伝いいただければ幸いです。

+1

#onResumeメソッド?それらはあなたがする必要があるべきではない2つのものです(すでにあなたがリンクしているwikiページですでに読んでいるように)。 – Xoppa

+0

シングルトンは、自分の資産をロード/取得するカスタムUIコンポーネントがたくさんあるので便利です。新しいUIコンポーネントをインスタンス化するカスタムの 'GameAssetManager'のインスタンスを渡すことができましたが、コンテキストが変更され、基本的な' AssetManager'デリゲートがもう機能しない場合、どうすればこの状況に役立ちますか? AndroidLaucher#onResumeをオーバーライドする場合、wikiの記事では、新しいAssetManagerを作成し、アプリケーションの再開時にTextureに設定する必要があると述べています。 https:// github。com/libgdx/libgdx/wiki/Managing-your-assets#再読み込み中画面 – Townsfolk

+0

「読み込み画面あり」と書かれていますが、私が使っていなくても更新するべきだと思いましたローディング画面。 – Townsfolk

答えて

0

簡単な説明は、アプリケーションがJVMヒープのテクスチャ参照を有効と見なすことがあるが、GPUの実際のテクスチャバイトが無効である可能性があるということです。

これは、別のアクティビティやプロセスがOpenGLコンテキストを引き出してGPUに与えられたすべてが破棄されるため、onPauseでよく発生します。 (onResume)の後にプログラムを再開すると、テクスチャを保持する変数が破棄されず、有効なJVMヒープオブジェクトを指している可能性があります(静的な参照があるか、Gargabeコレクタが何も主張していないためです) GPUの中にあるものはなくなり、再びそこにプッシュ/リロードする必要があります。

これは直接libgdx「慈悲深い独裁者」で、あなたはより完全な答えを与えることができます記事です:)

あなたはシングルトンが必要なのですか、なぜあなたはAndroidLauncherをオーバーライドする必要がないのはなぜ

http://www.badlogicgames.com/wordpress/?p=1073

+1

これは間違っています。この問題は、Android上で再利用されているJVMに対応していない不適切な設計(正しく管理されていない「静的」を使用)によって引き起こされます。 OpenGLのコンテキストの損失(これは古代のデバイスを持っていなければ決して起こりません)に起因するものではありません。あなたが参照したページを読むと、libgdxが実際にそれらのコンテキスト・ロス(それ以上は起こらないでしょう)を "修正"することをあなたは読むでしょう。詳細はhttp://badlogicgames.com/forum/viewtopic.php?f=11&t=20757&p=86095#p86095を参照してください。 – Xoppa

+0

コメントありがとうございました。これはOpenGLのコンテキストストーリーを私が理解したものであり、OpenGLの低レベルの経験に基づいているわけではないので、間違っている可能性が非常に高いです。しかし、私は、静的なものを適切に管理しないとどういう意味ですか?静的なテクスチャ参照STRを持っている場合、STRが(1)ヌル、(2)ヒープ内のテクスチャとGPUの有効な参照、(3)ヒープ内のテクスチャへの有効な参照GPUでは無効ですか? – middlehut

+0

@Xoppaそして、GPUが複数のコンテキストをどのように扱うかについてのリンクと有益な説明をありがとう。 – middlehut

関連する問題