Java Andengine GLES2-为多个TextureRegion加载一个BitmapTextureAtlas的正确方法

Java Andengine GLES2-为多个TextureRegion加载一个BitmapTextureAtlas的正确方法,java,android,opengl-es-2.0,andengine,Java,Android,Opengl Es 2.0,Andengine,我是Andengine的新手,在某个地方我发现,如果你想用一个BitmapTextureAtlas来制作几个按钮脚本/精灵,你必须这样做 BitmapTextureAtlas texAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 316, 1062, TextureOptions.NEAREST_PREMULTIPLYALPHA); for (int i = 0; i < 10; i++) {

我是Andengine的新手,在某个地方我发现,如果你想用一个BitmapTextureAtlas来制作几个按钮脚本/精灵,你必须这样做

BitmapTextureAtlas texAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 316, 1062, TextureOptions.NEAREST_PREMULTIPLYALPHA);

    for (int i = 0; i < 10; i++) {
        TextureRegion pistolActive = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texAtlas, activity.getApplicationContext(), POWERUP_TEXTURE_PATH, 0, 0);
        pistolActive.set(0, 0, TILE_WIDTH, TILE_HEIGHT);

        TextureRegion pistolUnactive = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texAtlas, activity.getApplicationContext(), POWERUP_TEXTURE_PATH, 0, 0);
        pistolUnactive.set(0, TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);

        TextureRegion pistolDeactive = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texAtlas, activity.getApplicationContext(), POWERUP_TEXTURE_PATH, 0, 0);
        pistolDeactive.set(0, TILE_HEIGHT * 2, TILE_WIDTH, TILE_HEIGHT);
        texAtlas.load();

        ButtonSprite button = new ButtonSprite(0, 0, pistolActive, pistolUnactive, pistolDeactive, activity.getVertexBufferObjectManager(), new ButtonSprite.OnClickListener() {
            @Override
            public void onClick(final ButtonSprite buttonSprite, float v, float v2) {
            }
        });
    }
BitmapTextureAtlas texAtlas=新的BitmapTextureAtlas(activity.getTextureManager(),3161062,TextureOptions.NEAREST_PREMULTIPLYALPHA);
对于(int i=0;i<10;i++){
TextureRegion PistonalActive=BitMapTextureAtlastTextureRegionFactory.createFromAsset(texAtlas,activity.getApplicationContext(),通电纹理路径,0,0);
激活。设置(0,0,瓷砖宽度,瓷砖高度);
TextureRegion PistonuActive=BitMapTextureAtlastTextureRegionFactory.createFromAsset(texAtlas,activity.getApplicationContext(),通电\u纹理\u路径,0,0);
PistonUnactive.set(0,瓷砖高度,瓷砖宽度,瓷砖高度);
TextureRegion pistolDeactive=BitMapTextureAtlastTextureRegionFactory.createFromAsset(texAtlas,activity.getApplicationContext(),通电纹理路径,0,0);
pistolDeactive.set(0,瓷砖高度*2,瓷砖宽度,瓷砖高度);
加载();
ButtonSprite button=new ButtonSprite(0,0,PistonCActive,PistonCunActive,PistonCdeActive,activity.getVertexBufferObjectManager(),new ButtonSprite.OnClickListener()){
@凌驾
单击公共无效(最终按钮写入按钮写入、浮动v、浮动v2){
}
});
}
但现在我检查一下,如果您将
texAtlas.load()
放在循环之前,它也会工作。但最佳实践是什么?

BitmapTextureAtlas texAtlas=new BitmapTextureAtlas(activity.getTextureManager(),3161062,TextureOptions.NEAREST_PREMULTIPLYALPHA);
BitmapTextureAtlas texAtlas = new BitmapTextureAtlas(activity.getTextureManager(), 316, 1062, TextureOptions.NEAREST_PREMULTIPLYALPHA);
        TextureRegion pistolActive = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texAtlas, activity.getApplicationContext(), POWERUP_TEXTURE_PATH, 0, 0);
        pistolActive.set(0, 0, TILE_WIDTH, TILE_HEIGHT);

        TextureRegion pistolUnactive = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texAtlas, activity.getApplicationContext(), POWERUP_TEXTURE_PATH, 0, 0);
        pistolUnactive.set(0, TILE_HEIGHT, TILE_WIDTH, TILE_HEIGHT);

        TextureRegion pistolDeactive = BitmapTextureAtlasTextureRegionFactory.createFromAsset(texAtlas, activity.getApplicationContext(), POWERUP_TEXTURE_PATH, 0, 0);
        pistolDeactive.set(0, TILE_HEIGHT * 2, TILE_WIDTH, TILE_HEIGHT);
        texAtlas.load();
        for (int i = 0; i < 10; i++) {
            ButtonSprite button = new ButtonSprite(0, 0, pistolActive, pistolUnactive, pistolDeactive, activity.getVertexBufferObjectManager(), new ButtonSprite.OnClickListener() {
                @Override
                public void onClick(final ButtonSprite buttonSprite, float v, float v2) {
                }
            });
        }
TextureRegion PistonalActive=BitMapTextureAtlastTextureRegionFactory.createFromAsset(texAtlas,activity.getApplicationContext(),通电纹理路径,0,0); 激活。设置(0,0,瓷砖宽度,瓷砖高度); TextureRegion PistonuActive=BitMapTextureAtlastTextureRegionFactory.createFromAsset(texAtlas,activity.getApplicationContext(),通电\u纹理\u路径,0,0); PistonUnactive.set(0,瓷砖高度,瓷砖宽度,瓷砖高度); TextureRegion pistolDeactive=BitMapTextureAtlastTextureRegionFactory.createFromAsset(texAtlas,activity.getApplicationContext(),通电纹理路径,0,0); pistolDeactive.set(0,瓷砖高度*2,瓷砖宽度,瓷砖高度); 加载(); 对于(int i=0;i<10;i++){ ButtonSprite button=new ButtonSprite(0,0,PistonCActive,PistonCunActive,PistonCdeActive,activity.getVertexBufferObjectManager(),new ButtonSprite.OnClickListener()){ @凌驾 单击公共无效(最终按钮写入按钮写入、浮动v、浮动v2){ } }); }
无需多次创建纹理区域。因此,请使用这种方式

实际上,如果以这种方式加载,您将遇到一些UI问题。 所以我的建议是为不同的精灵加载不同的纹理

如果你想避免加载问题,那么你可以选择Sprite床单(例如TexturePacker)