Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX-应该先执行texture.dispose(),然后再执行batch.dispose()?还是没什么不同?_Java_Libgdx_Dispose_Reference Counting - Fatal编程技术网

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

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

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

我有以下简单的代码。我的问题是应该纹理。dispose();首先在dispose()方法中执行batch.dispose()

这是因为我们在sprite=newsprite(纹理)中传递了一个纹理引用;然后是雪碧。画(批)

如果纹理没有先破坏,则无法破坏精灵或批次。 它与参考计数有关吗

以下是LibGDX Assetmanager官方网站(我将在下一阶段尝试Assetmanager):

处置资产

再次简单,在这里您可以看到AssetManager的真正威力:

卸载(“data/myfont.fnt”)

如果该字体引用了之前手动加载的纹理,则 纹理不会被破坏!它将被引用计数,得到一个 来自位图字体的引用和来自自身的引用。只要 此计数不是零,纹理将不会被处理

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