- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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()
方法中没有处理。因此,如果您想处置用于创建舞台的所有资源。即皮肤。您需要通过 AssetManager
的 unload(...)
或 dispose()
方法手动完成。
关于java - LibGDX - 是否应该先执行 texture.dispose() 然后再执行 batch.dispose()?或者没有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30979609/
我有本地更改和远程更改。 有人告诉我必须先推,再 pull 。这背后有什么原因吗? 最佳答案 那个人错了:正确的模型是pull-before-you-push,而不是相反。 当您pull时,git 将
我正在使用最新版本的 Flat UI Pro 1.3.2 ( http://designmodo.com/flat/ ),jQuery 插件 flatui-radiocheck v0.1.0 和 iO
我是一名优秀的程序员,十分优秀!