Мой AndEngine onLoadResources () не кажется эффективным - PullRequest
0 голосов
/ 01 декабря 2011

Я использую AndEngine для создания живых обоев. Тем не менее, в моем методе onLoadResources () я в настоящее время загружаю 3 различные текстуры:

@Override
public void onLoadResources() {
    prefs = PhysicsWallpaperActivity.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
    prefs.registerOnSharedPreferenceChangeListener(this);
    this.mAutoParallaxBackgroundTexture = new BitmapTextureAtlas(2048, 2048, TextureOptions.DEFAULT);
    this.mAutoParallaxImage1Texture = new BitmapTextureAtlas(2048, 2048, TextureOptions.DEFAULT);
    this.mAutoParallaxImage2Texture = new BitmapTextureAtlas(2048, 2048, TextureOptions.DEFAULT);

    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
    this.mParallaxLayerBackground = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "background.jpg", 0, 0);
    this.mParallaxLayerImage1 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxImage1Texture, this, "image1.jpg", 0, 0);
    this.mParallaxLayerImage2 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxImage2Texture, this, "image2.png", 0, 800);

    this.mEngine.getTextureManager().loadTexture(this.mAutoParallaxBackgroundTexture);  
    this.mEngine.getTextureManager().loadTexture(this.mAutoParallaxImage1Texture);               
    this.mEngine.getTextureManager().loadTexture(this.mAutoParallaxImag2Texture);               

}

Я чувствую, что это не самый эффективный способ сделать это. Но если у меня есть все мои «изображения» BitmapTextureAtlasTextureRegionFactorys, указывающие только на один BitmapTextureAtlas, и эти «изображения» имеют одинаковые координаты, изображения будут загружаться друг на друга, даже если я вызову только 1 из них.

Пример проблемы здесь:

    @Override
 public void onLoadResources() {
    prefs = PhysicsWallpaperActivity.this.getSharedPreferences(SHARED_PREFS_NAME, 0);
    prefs.registerOnSharedPreferenceChangeListener(this);
    this.mAutoParallaxBackgroundTexture = new BitmapTextureAtlas(2048, 2048, TextureOptions.DEFAULT);

    BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");
    this.mParallaxLayerBackground = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "background.jpg", 0, 0);
    this.mParallaxLayerImage1 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "image1.jpg", 0, 0;
    this.mParallaxLayerImage2 = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mAutoParallaxBackgroundTexture, this, "image2.png", 0, 800);

    this.mEngine.getTextureManager().loadTexture(this.mAutoParallaxBackgroundTexture);               

}

^ Мне бы хотелось использовать подобный код, потому что он кажется более эффективным, но 'image1' и 'image2' автоматически загружаются друг на друга, даже если я вызываю только 1 из них.

Я делаю это правильно? Или есть более эффективный способ?

Ответы [ 2 ]

2 голосов
/ 03 декабря 2011

Ваши текстуры могут содержать более одного ресурса.Думайте об этом как лист спрайта.или как приклеить фотографии к большому белому листу бумаги.вам не нужна новая текстура для каждой области текстуры.Например: скажем, у вас есть изображение звезды размером 250x250 пикселей и изображение космического корабля размером 100x100 пикселей.Вы можете поместить оба из них на текстуру размером 512x256.Вы создаете область текстуры для звезды (250x250) в 0, 0. Затем создаете вторую область текстуры для космического корабля в 251, 0.

В этом сценарии есть еще некоторая оставшаяся область для других изображений.космический корабль, если они достаточно малы, чтобы соответствовать.Изображение ниже показывает, как будет выглядеть ваша текстура, если вы сможете увидеть ее в памяти.

texture with two resources added

Надеюсь, это поможет.

0 голосов
/ 01 декабря 2011

Ваши Текстуры огромны! Вы очень уверены, что они вам нужны такие большие?

...