在场景上动态加载新的Sprite

时间:2013-08-13 19:06:27

标签: android textures andengine

我是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错误/功能吗?有没有办法动态加载场景中的新纹理?我能找到的唯一信息与赛前资源加载有关。

1 个答案:

答案 0 :(得分:1)

你可以在这里进行优化。只在onLoadResources中加载TiledTextureRegion一次,然后在创建Sprite时,您可以根据需要复制(使用copy()或deepCopy())。这样,将Region实际加载到内存中的昂贵过程只进行一次。

希望这有帮助。