我的AndEngine onLoadResources()似乎效率不高

时间:2011-11-30 22:35:35

标签: android andengine live-wallpaper

我正在使用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,并且这些'图像'处于相同的坐标,即使我只调用其中的一个,图像也会相互加载。

问题的一个例子是:

    @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'会自动加载到彼此之上,即使我只调用其中的一个。

我这样做是对的吗?还是有更有效的方式?

2 个答案:

答案 0 :(得分:2)

您的纹理可以包含多个资源。把它想象成精灵表。或者喜欢将照片粘在一张白色的大纸上。您不需要为每个纹理区域添加新纹理。例如: 假设您有一个250x250像素的星形图像和一个100x100像素的太空船图像。您可以将这两个放在尺寸为512x256的纹理上。 您可以在0,0处为星形(250x250)创建纹理区域。 然后在251,0处为宇宙飞船创建第二个纹理区域。

在那种情况下,如果它们足够小以适应其他图像,那么仍有一些剩余区域可以击中太空船。下面的图片显示了如果你能在内存中看到纹理,你的纹理会是怎样的。

texture with two resources added

希望这有帮助。

答案 1 :(得分:0)

你的纹理很大!你确定你需要那么大吗?