2014-04-17 36 views
0

我在Andengine是新和地方我發現,如果你想使用一個BitmapTextureAtlas幾個ButtonSprites /精靈,你必須做這樣Andengine GLES2 - 正確的方式來加載一個BitmapTextureAtlas數TextureRegion

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) { 
      } 
     }); 
    } 

但現在我檢查,如果你在循環之前放texAtlas.load(),它也會起作用。但最佳做法是什麼?

回答

0
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) { 
       } 
      }); 
     } 

不需要多次創建紋理區域。所以要這樣做。

其實如果你用這種方式加載,你會得到一些UI問題。 所以我的建議是使用不同的紋理不同的精靈加載

如果你想避免負載問題,那麼你可以去雪碧表(如.. TexturePacker)