libGDX我应该在哪里使用dispose /如何使对象可以处置?

时间:2015-06-07 19:54:01

标签: java libgdx dispose

我想知道:

  1. 我有一个舞台,它拥有一个Actor类。我是否必须取消纹理和精灵?

    public class SimpleImage extends Image {
    
        protected Sprite sprite;
    
        public SimpleImage(FileHandle file) {
            super();
            sprite = new Sprite(new Texture(file));
        }
    
        @Override
        public void draw(Batch batch, float parentAlpha) {
            super.draw(batch, parentAlpha);
            sprite.draw(batch);
            batch.setColor(this.getColor());
        }
    
        @Override
            public void act(float delta) {
            super.act(delta);
        }
    
        @Override
        protected void positionChanged() {
            super.positionChanged();
            sprite.setPosition(getX(), getY());
        }
    }
    
  2. 如何制作obj一次性用品?在Java库中有两个:MediaDisposer.Disposable和MediaDisposer.ResourceDisposer。

  3. 我什么时候需要制作obj一次性用品?

1 个答案:

答案 0 :(得分:1)

您可能想申请separation of concerns。您的SimpleImage课程不应该关心管理资产。因此,您不应该首先在Texture课程中创建SimpleImage。因此,你不应该处置它。

通过使用AssetManager来管理资产。

此外,您应该pack your images加入一个Texture。这意味着您不能每Texture使用一个SimpleImage,而是使用一个Texture用于多个SimpleImage(或其他需要图像的类)

所以你应该重新考虑你的方法。那就是说,让我回答你的问题。

  1. 您需要处理实现Disposable接口的所有内容。 Texture实现了Disposable界面,Sprite没有。

  2. 如果要使对象实现Disposable接口,请使其实现Disposable接口。如果您在导入时遇到问题,请com.badlogic.gdx.utils.DisposableIt's a libGDX interface并且与MediaDisposer无关。

  3. 当负责处置资源时,您可以使对象成为可处理对象。通常,这意味着负责在其创建的成员对象上调用.dispose()方法。你不必让它们成为一次性的,只要你确保你处理你正在创造的资源,那就没事了。