Java LibGDX-应该先执行texture.dispose(),然后再执行batch.dispose()?还是没什么不同?
LibGDX-应该先执行texture.dispose(),然后再执行batch.dispose()?还是没什么不同 我有以下简单的代码。我的问题是应该纹理。dispose();首先在dispose()方法中执行batch.dispose() 这是因为我们在sprite=newsprite(纹理)中传递了一个纹理引用;然后是雪碧。画(批) 如果纹理没有先破坏,则无法破坏精灵或批次。 它与参考计数有关吗 以下是LibGDX Assetmanager官方网站(我将在下一阶段尝试Assetmanager): 处置资产 再次简单,在这里您可以看到AssetManager的真正威力: 卸载(“data/myfont.fnt”) 如果该字体引用了之前手动加载的纹理,则 纹理不会被破坏!它将被引用计数,得到一个 来自位图字体的引用和来自自身的引用。只要 此计数不是零,纹理将不会被处理Java LibGDX-应该先执行texture.dispose(),然后再执行batch.dispose()?还是没什么不同?,java,libgdx,dispose,reference-counting,Java,Libgdx,Dispose,Reference Counting,LibGDX-应该先执行texture.dispose(),然后再执行batch.dispose()?还是没什么不同 我有以下简单的代码。我的问题是应该纹理。dispose();首先在dispose()方法中执行batch.dispose() 这是因为我们在sprite=newsprite(纹理)中传递了一个纹理引用;然后是雪碧。画(批) 如果纹理没有先破坏,则无法破坏精灵或批次。 它与参考计数有关吗 以下是LibGDX Assetmanager官方网站(我将在下一阶段尝试Assetmanage
batch.dispose()
将只处理批处理内部资源(ShaderProgram等)<代码>纹理.dispose()代码>将处理单个纹理
你先打哪一个电话并不重要。他们处理无关资源。但是你不能再使用纹理了。调用sprite.draw(批处理)代码>不适用于已处理的纹理
AssetManager
仅统计对其加载的资产的引用。这里没有必要考虑。
更新阶段
:
发件人:
对Stage
的实例调用dispose()
将处理其内部批处理并清除所有子级(Actors
)。我深入研究了代码,在clear()
方法中没有处理。因此,如果您想处置用于创建阶段的所有资源。即皮肤。您需要通过AssetManager的unload(…)
或dispose()
方法手动执行此操作,谢谢您的回复。实际上,我正在LibGDX中与Assetmanager合作。我创建了一个资产类,在主菜单屏幕上有一个stage=newstage(),按钮=新按钮(Assets.menuSkin,“按钮”);还有stage.addActor(按钮);最后,我放置stage.dispose();在dispose()方法中。我的问题是我将Assets.menuSkin传递到Button()构造函数中,这个阶段真的被处理了吗?还是我需要先卸下梅努斯金?
package com.program.mydemo;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class MyDemo extends ApplicationAdapter {
SpriteBatch batch;
Texture texture;
Sprite sprite;
@Override
public void create () {
batch = new SpriteBatch();
texture = new Texture("bg.png");
sprite=new Sprite(texture);
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
sprite.draw(batch);
batch.end();
}
@Override
public void dispose() {
batch.dispose();
texture.dispose();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
public void dispose () {
clear();
if (ownsBatch) batch.dispose();
}