Java Andengine GLES2-为多个TextureRegion加载一个BitmapTextureAtlas的正确方法
我是Andengine的新手,在某个地方我发现,如果你想用一个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++) {
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)