Возникла необходимость загружать большую картинку карты мира (4740х2600) с возможностью её скроллить и зуммировать. Немного погуглив, остановился на решении, предложенным в этом топике. А именно - разбить её на несколько частей а затем загружать отдельными спрайтами:
private ITextureRegion mWorldMapTextureRegionSW;
private ITextureRegion mWorldMapTextureRegionSE;
private ITextureRegion mWorldMapTextureRegionNW;
private ITextureRegion mWorldMapTextureRegionNE;
@Override
public void onCreateResources() {
//
// Указываем путь до графики. В данном случае графика будет загружаться из папки assets/gfx/
//
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
// карта мира
this.mBitmapTextureAtlasWorldMapSW = new BitmapTextureAtlas(2370, 1300, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.mBitmapTextureAtlasWorldMapSE = new BitmapTextureAtlas(2370, 1300, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.mBitmapTextureAtlasWorldMapNE = new BitmapTextureAtlas(2370, 1300, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.mBitmapTextureAtlasWorldMapNW = new BitmapTextureAtlas(2370, 1300, TextureOptions.BILINEAR_PREMULTIPLYALPHA);
this.mWorldMapTextureRegionSW = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlasWorldMapSW, this, "world_map_sw.png", 0, 0);
this.mWorldMapTextureRegionSE = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlasWorldMapSE, this, "world_map_se.png", 0, 0);
this.mWorldMapTextureRegionNW = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlasWorldMapNW, this, "world_map_nw.png", 0, 0);
this.mWorldMapTextureRegionNE = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlasWorldMapNE, this, "world_map_ne.png", 0, 0);
this.mBitmapTextureAtlasWorldMapSW.load(this.getTextureManager());
this.mBitmapTextureAtlasWorldMapSE.load(this.getTextureManager());
this.mBitmapTextureAtlasWorldMapNW.load(this.getTextureManager());
this.mBitmapTextureAtlasWorldMapNE.load(this.getTextureManager());
} // onCreateResources
@Override
public Scene onCreateScene() {
this.mScene = new Scene();
this.mEngine.registerUpdateHandler(new FPSLogger());
// полные размеры картинки
final float worldMapWidth = this.mWorldMapTextureRegionNW.getWidth() * 2;
final float worldMapHeight = this.mWorldMapTextureRegionNW.getHeight() * 2;
/* Вычисляем координаты левого верхнего угла первой картинки */
final float centerX = (CAMERA_WIDTH - worldMapWidth ) / 2;
final float centerY = (CAMERA_HEIGHT - worldMapHeight) / 2;
this.worldMapNW = new Sprite(centerX, centerY, this.mWorldMapTextureRegionNW, this.getVertexBufferObjectManager());
this.worldMapNE = new Sprite(centerX + this.mWorldMapTextureRegionNW.getWidth(), centerY, this.mWorldMapTextureRegionNE, this.getVertexBufferObjectManager());
this.worldMapSW = new Sprite(centerX, centerY + this.mWorldMapTextureRegionNW.getHeight(), this.mWorldMapTextureRegionSW, this.getVertexBufferObjectManager());
this.worldMapSE = new Sprite(centerX + this.mWorldMapTextureRegionNW.getWidth(), centerY + this.mWorldMapTextureRegionNW.getHeight(), this.mWorldMapTextureRegionSE, this.getVertexBufferObjectManager());
// добавляем спрайты на сцену
this.mScene.attachChild( this.worldMapSW );
this.mScene.attachChild( this.worldMapSE );
this.mScene.attachChild( this.worldMapNW );
this.mScene.attachChild( this.worldMapNE );
return mScene;
}
Также, для сборки большого спрайта можно воспользоваться классом BitmapTextureAtlasSource отсюда. Как это делается напишу позднее, если разберусь. Пока это без необходимости, всё и так работает очень шустро и плавно.
Комментариев нет:
Отправить комментарий