0

私は Andengine を初めて使用し、River City Ransom に似たゲームプレイでゲームを作成しようとしました - http://www.youtube.com/watch?v=goQlPC5wOic

問題: シーンの作成中に、プレイヤー スプライト、背景、HUD をロードします。他のすべての準備が整う前にこれらのいずれかをロードするのは意味がないため、一度にロードしても問題ありません。

しかし、新しい Sprite の新しい TiledTextureRegion を非同期的に作成しようとすると (新しい敵がエッジからシーンに表示されます)、TextureRegion がアセットから作成される間にまだ遅延が発生します。

例:

new LoadNewEnemyOnSceneTask(enemyTexture, enemyTextureRegion, mScene, this).execute();

public class LoadNewEnemyOnSceneTask extends AsyncTask<String, Void, PixelPerfectAnimatedSprite> {


private PixelPerfectTiledTextureRegion enemyTextureRegion;
private BitmapTextureAtlas enemyTexture;
private Scene scene;
BaseGameActivity act;

public LoadNewEnemyOnSceneTask(BitmapTextureAtlas enemyTexture, PixelPerfectTiledTextureRegion       enemyTextureRegion, Scene scene, BaseGameActivity act)
{
    this.enemyTexture = enemyTexture;
    this.enemyTextureRegion = enemyTextureRegion;
    this.scene = scene;
    this.act = act;
}

@Override
protected PixelPerfectAnimatedSprite doInBackground(String... params) {
    enemyTextureRegion = PixelPerfectTextureRegionFactory.createTiledFromAsset(enemyTexture, act.getAssets(), "akira.png", 0, 200, 5, 3, 0);

    PixelPerfectAnimatedSprite enemy = new PixelPerfectAnimatedSprite(480, 200, enemyTextureRegion, act.getVertexBufferObjectManager());

    return enemy;
}      

@Override
protected void onPostExecute(PixelPerfectAnimatedSprite result)
{              
    scene.attachChild(result);
}

}

これは Andengine の内部バグ/機能ですか? シーンに新しいテクスチャを動的にロードする方法はありますか? 私が見つけた唯一の情報は、ゲーム前のリソースの読み込みに関するものでした。

4

1 に答える 1

1

ここで最適化できます。TiledTextureRegion を onLoadResources で 1 回ロードするだけで、スプライトを作成するときに、必要なだけ (copy() または deepCopy() を使用して) コピーできます。そうすれば、リージョンをメモリに実際にロードするコストのかかるプロセスは一度だけ実行されます。

お役に立てれば。

于 2013-08-13T19:59:55.653 に答える