gpt4 book ai didi

java - LibGDX - 是否应该先执行 texture.dispose() 然后再执行 batch.dispose()?或者没有什么不同?

转载 作者:行者123 更新时间:2023-11-30 08:50:27 29 4
gpt4 key购买 nike

LibGDX - 是否应该先执行 texture.dispose() 然后再执行 batch.dispose()?还是没有什么不同?

我有以下简单的代码。我的问题是 texture.dispose();在dispose()方法中先执行再执行batch.dispose()?

这是因为我们在 sprite=new Sprite(texture); 中传递了一个纹理引用然后 sprite.draw(batch);

如果纹理没有先销毁,则 Sprite 或批处理不能被销毁。与引用计数有关吗?

这是 LibGDX Assetmanger 官方网站(我将在下一阶段试用 Assetmanager):

Disposing Assets

Easy again, and here you can see the real power of the AssetManager:

manager.unload("data/myfont.fnt");

If that font references a Texture that you loaded manually before, the texture won't get destroyed! It will be reference counted, getting one reference from the bitmap font and another from itself. As long as this count is not zero, the texture won't be disposed.

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() {
}
}

最佳答案

batch.dispose() 将仅处理批处理内部资源(ShaderProgram 等)。 texture.dispose(); 将处理单个纹理。

先调用哪个 dispose 并不重要。他们处理不相关的资源。但是你不能再使用处置纹理了。调用 sprite.draw(batch); 将无法处理已处理的纹理。

AssetManager 仅计算对其加载的 Assets 的引用。此处无需考虑。

阶段更新:

来自 source :

public void dispose () {
clear();
if (ownsBatch) batch.dispose();
}

Stage 的实例上调用 dispose() 将处理其内部批处理并清除所有子项(Actor)。我更深入地研究了代码,clear() 方法中没有处理。因此,如果您想处置用于创建舞台的所有资源。即皮肤。您需要通过 AssetManagerunload(...)dispose() 方法手动完成。

关于java - LibGDX - 是否应该先执行 texture.dispose() 然后再执行 batch.dispose()?或者没有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30979609/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com