2016-12-27 2 views
0

Nach der Suche fand ich heraus, Sprite ist eine Unterklasse von TextureRegion in Libgdx. Also, wie ein Sprite-Objekt zu entsorgen?Wie man ein Sprite in Libgdx entsorgt?

public void create() { 
    batch = new SpriteBatch(); 
    sprite = new Sprite(new Texture("pizza.jpg")); 


} 

@Override 
public void render() { 
    Gdx.gl.glClearColor(0,0,0,1); 
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
    batch.begin(); 

    batch.end(); 

} 

@Override 
public void dispose() { 
    batch.dispose(); 
    sprite.getTexture().dispose(); 

Ist das der richtige Weg? Danke im Voraus!

+0

Ja, es ist der richtige Weg. Dieses [Thema] (http://stackoverflow.com/questions/29574504/libgdx-dispose-sprite-or-texture-in-sprite-ismandatory) erklärt warum. – Squiddie

Antwort

1

Wie Sie gesagt haben, hat die Sprite-Klasse selbst keine dispose-Methode, also würden Sie die Sprite-Textur entsorgen.

Ein besserer Weg insgesamt wäre jedoch, die AssetManager class zu verwenden, um die Textur zu laden und zu entsorgen. Auf diese Weise können Sie alle Ihre Texturen an einem Ort verwalten (sodass Sie sie bei Bedarf sofort nach dem Beenden des Programms wieder löschen können).

Hier ist ein Beispiel von einem Spiel, das ich gerade arbeite:

public class Controller extends Game { 
    @Override 
    public void create() { 
     // Some loading stuff ... 

     // Initialize the asset manager 
     // TODO: Make a snazzy loading bar 
     assetManager = new AssetManager(); 
     assetManager.load(ATLAS_NAME, TextureAtlas.class); 
     assetManager.finishLoading(); 

     // Other loading stuff... 
    } 

    // Other methods snipped for space reasons... 

    @Override 
    public void dispose() { 
     // I dispose of things not managed by the asset manager... 

     // Dispose of any other resources 
     assetManager.dispose(); 
    } 

/** 
    * Convenience method to safely load textures. If the texture isn't found, a blank one is created and the error is logged. 
    * @param imageName The name of the image that is being looked up. 
    * @return 
    */ 
    public TextureRegionDrawable getManagedTexture(String imageName) { 
     try { 
      return new TextureRegionDrawable(assetManager.get(ATLAS_NAME, TextureAtlas.class).findRegion(imageName)); 
     } catch(Exception e) { 
      Gdx.app.error(getClass().getSimpleName(), "Couldn't get managed texture.", e); 
      return getEmptyTexture(); 
     } 
    } 
    public TextureRegionDrawable getEmptyTexture() { 
     return new TextureRegionDrawable(new TextureRegion(new Texture(new Pixmap(1,1, Pixmap.Format.RGBA8888)))); 
    } 
} 

Zwar habe ich eine flippige Methode, die Asset-Manager wickelt, so dass ich immer eine Textur zurück (auch wenn es leer ist), aber die normale Nutzung von Asset-Manager ist so einfach wie diese:

Texture tex = assetManager.get("my/texture/name.png", Texture.class); 

Es arbeitet mit anderen Klassen zu wie Atlanten und Skin.

+0

Danke. Könnten Sie ein konkretes Beispiel für jemanden geben, der wie ich für Libgdx neu ist? –

+0

Ich habe die Antwort aktualisiert - lassen Sie mich wissen, ob das hilft. – John

+0

Danke. Ich denke, also AssetManager ist im Grunde großartig, viele Bilddateien zu verwalten. Ich werde mehr darüber nachdenken. –

Verwandte Themen