2016-12-27 9 views
0

検索した後、私はSpriteがLibgdxのTextureRegionのサブクラスであることを発見しました。 Spriteオブジェクトを処分する方法は?Libgdxでスプライトを処理する方法は?

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

これは正しい方法ですか?前もって感謝します!

+0

はい正しい方法です。この[トピック](http://stackoverflow.com/questions/29574504/libgdx-dispose-sprite-or-texture-in-sprite-is-mandatory)には理由が説明されています。 – Squiddie

答えて

1

あなたが言ったように、Spriteクラス自体はdisposeメソッドを持っていないので、Spriteのテクスチャをどのように処分するのです。

しかし、より良い方法は全体としてAssetManager classを使用してテクスチャを読み込んで処分することです。そうすることで、すべてのテクスチャを1か所で管理することができます(必要に応じて、プログラムが終了した時点で一度にすべて破棄することができます)。ここで

は、私が現在働いているゲームからの例です:

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

は確かに私は常に(それが空白だとしても)テクスチャを取り戻すように、アセット・マネージャーをラップファンキーな方法を作成しましたが、資産管理者の通常の使用は次のように簡単です:

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

AtlasesとSkinsのような他のクラスでも機能します。

+0

ありがとうございます。あなたは私のようなLibgdxに新しい人のためにそうすることの具体的な例を挙げることができますか? –

+0

答えが更新されました。 – John

+0

ありがとうございます。私はそうだと思うので、基本的にAssetManagerはたくさんの画像ファイルを管理しています。私はそれをさらに見ていきます。 –

関連する問題