1

どちらのバージョンも機能しますが、どちらを使用すればよいのか、またそのバージョンを使用する理由がわかりません。アセットを既にアンロードしている場合、TextureAtlas を破棄する必要がありますか?

バージョン 1: パック ファイル (位置データを含む TexturePacker ファイル) を png と共に読み込みます。

gameSpriteSheet = new TextureAtlas(Gdx.files.internal(DATA_DIR_PATH + "GameSpritesPack.txt"));

assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt");
assetManager.load(DATA_DIR_PATH + "GameSpritesPack.png");

// Call only if assetmanager's update method returns true
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet);

アンロードするには:

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) {
   assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.txt");
}

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.png")) {
   assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.png");
}

if(gameSpriteSheet != null) {
   gameSpriteSheet.dispose();
}

バージョン 2: パック ファイル (位置データを含む TexturePacker ファイル) のみを読み込みます。

assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt");

// Call only if assetmanager's update method returns true
gameSpriteSheet = assetManager.get(DATA_DIR_PATH + "GameSpritesPack.txt", TextureAtlas.class);
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet);

アンロードするには:

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) {
   assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.txt");
}

if(gameSpriteSheet != null) {
   gameSpriteSheet.dispose();
}

注: AssetManager に関する Mario の投稿やその他のブログを読みましたが、上記の両方のバージョンが正常に動作する理由がわかりません。

4

1 に答える 1

6

AssetManager は、アセットを「バックグラウンドで」ロードするためのものです。リストした最初のバージョンは、現在のスレッドでアトラスを同期的にロードするだけです。実際には AssetManager をまったく使用していません。これは問題なく機能します。欠点は、アトラスが大きい場合 (または、これを行っているアトラスが多数ある場合)、アプリがしばらくの間「ハング」することです。

gameSpriteSheet = new TextureAtlas(Gdx.files.internal(DATA_DIR_PATH + "GameSpritesPack.txt"));

実行します。最初の例の 2assetManager行は、この場合は何も (役に立たない) ため、削除できます。

2 番目のバージョンは、AssetManager. ... new TextureAtlas(...)基本的に、最初のバージョンで使用したコード ( ) をバックグラウンド スレッドで実行するようアセット マネージャーに依頼しています。そのバックグラウンド スレッドが完了するまで (つまり、update()true を返すまで) 待つ必要があります。ロードが完了したかどうかを定期的にチェックしながら、フォアグラウンドのレンダー スレッドで他のことを実行できる (つまり、ゲーム アセットをロードしている間、ユーザーの注意をそらすために画面上できれいなパターンをアニメーション化する) ことができるという考えです。

于 2013-03-07T03:29:39.203 に答える