0

「ロード画面」を使用しない/使用できないゲームがあります。AssetManager広告が表示された後、または IAP プロセスが発生した後、基本的に OpenGL コンテキストが変更されるたびに、その場でアセットをロードするのに問題があります。

AssetManagerの wiki 記事に従いましたが、「新しい」テクスチャをロードしようとすると、黒いテクスチャが表示されます。

私はSingletonLibGDXGameAssetManagerAssetManager.

例えば:

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;
    }
}

私のでは、次のようにメソッドAndroidLauncherをオーバーライドします。onResume

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

GameAssetManager.resume()メソッドはこれを行うだけです:

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

アイテムが Google の IAB ライブラリを通じて購入されたとき、または広告が表示されたときに、レイアウト/UI コンポーネントを変更する がありますStoreItemButtonGroup

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

ボタンごとに最大 4 つ (最大 30 個のボタン) のすべての可能なレイアウトを調べてプリロードし、状況に基づいてそれらを表示/非表示にするだけで、うまくいくように見えますが、これは多くのオーバーヘッドとエラーです。正当な理由もなく傾向があります。

ここで何か助けていただければ幸いです。

4

1 に答える 1

0

簡単に説明すると、アプリケーションでは JVM ヒープ上のテクスチャ参照が有効であると見なされても、GPU 内の実際のテクスチャ バイトは無効である可能性があります。

これは、別のアクティビティまたはプロセスが OpenGL コンテキストを使用して自分自身を描画し、プログラムが GPU に配置したすべてが破棄される可能性があるため、一時停止時によく発生します。その後 (onResume) プログラムが再開すると、テクスチャを保持している変数は破棄されず、有効な JVM ヒープ オブジェクトを指している可能性があります (静的参照があるため、または Gargabe Collector が何も要求していないため)。 GPU にあるものはなくなり、そこに再度プッシュ/リロードする必要があります。

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

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

于 2016-12-02T17:39:31.317 に答える