Frage

Ich verwende AndEngine, um ein Live-Hintergrundbild zu erstellen.Allerdings lade ich in meiner onLoadResources()-Methode derzeit drei verschiedene Texturen:

@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);               

}

Ich habe das Gefühl, dass dies nicht der effizienteste Weg ist, dies zu tun.Wenn aber alle meine „Bilder“ von BitmapTextureAtlasTextureRegionFactorys auf nur einen einzelnen BitmapTextureAtlas verweisen und diese „Bilder“ die gleichen Koordinaten haben, werden die Bilder zusammen übereinander geladen, selbst wenn ich nur eines davon aufrufe.

Ein Beispiel für das Problem ist hier:

    @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);               

}

^ Ich hätte den Code gerne so verwendet, weil er effizienter erscheint, aber „image1“ und „image2“ werden automatisch übereinander geladen, selbst wenn ich nur eines davon aufrufe.

Mache ich das richtig?Oder gibt es einen effizienteren Weg?

War es hilfreich?

Lösung

Ihre Texturen können mehr als eine Ressource enthalten.Stellen Sie es sich wie ein Spritesheet vor.oder als würde man Fotos auf ein großes weißes Blatt Papier kleben.Sie benötigen nicht für jede Texturregion eine neue Textur.Zum Beispiel:Angenommen, Sie haben ein Sternbild mit 250 x 250 Pixeln und ein Raumschiffbild mit 100 x 100 Pixeln.Sie könnten beides auf einer Textur mit den Maßen 512 x 256 platzieren.Sie erstellen einen Texturbereich für den Stern (250 x 250) bei 0, 0.Erstellen Sie dann einen zweiten Texturbereich für das Raumschiff bei 251, 0.

In diesem Szenario bleibt noch Platz für andere Bilder, die das Raumschiff sprengen, sofern sie klein genug sind, um hineinzupassen.Das Bild unten zeigt, wie Ihre Textur aussehen würde, wenn Sie sie im Speicher sehen könnten.

texture with two resources added

Hoffe das hilft.

Andere Tipps

Deine Texturen sind riesig!Sind Sie ganz sicher, dass Sie sie so groß brauchen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top