作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
经过查找,发现Sprite是Libgdx中TextureRegion的子类。那么如何处理 Sprite 对象呢?
public void create() {
batch = new SpriteBatch();
sprite = new Sprite(new Texture("pizza.jpg"));
}
@Override
public void render() {
Gdx.gl.glClearColor(0,0,0,1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
batch.end();
}
@Override
public void dispose() {
batch.dispose();
sprite.getTexture().dispose();
这是正确的方法吗?提前致谢!
最佳答案
正如您所说,Sprite 类本身没有 dispose 方法,所以这就是您处理 Sprite 纹理的方式。
但是,整体上更好的方法是使用 AssetManager
class加载纹理并处理它。这样做可以让您在一个地方管理所有纹理(因此如果需要,可以在程序退出时一次性处理所有纹理)。
这是我目前正在开发的一款游戏的示例:
public class Controller extends Game {
@Override
public void create () {
// Some loading stuff ...
// Initialize the asset manager
// TODO: Make a snazzy loading bar
assetManager = new AssetManager();
assetManager.load(ATLAS_NAME, TextureAtlas.class);
assetManager.finishLoading();
// Other loading stuff...
}
// Other methods snipped for space reasons...
@Override
public void dispose () {
// I dispose of things not managed by the asset manager...
// Dispose of any other resources
assetManager.dispose();
}
/**
* Convenience method to safely load textures. If the texture isn't found, a blank one is created and the error is logged.
* @param imageName The name of the image that is being looked up.
* @return
*/
public TextureRegionDrawable getManagedTexture(String imageName) {
try {
return new TextureRegionDrawable(assetManager.get(ATLAS_NAME, TextureAtlas.class).findRegion(imageName));
} catch(Exception e) {
Gdx.app.error(getClass().getSimpleName(), "Couldn't get managed texture.", e);
return getEmptyTexture();
}
}
public TextureRegionDrawable getEmptyTexture() {
return new TextureRegionDrawable(new TextureRegion(new Texture(new Pixmap(1,1, Pixmap.Format.RGBA8888))));
}
}
不可否认,我创建了一个时髦的方法来包装 Assets 管理器,这样我总能得到一个纹理(即使它是空白的),但 Assets 管理器的正常使用就像这样简单:
Texture tex = assetManager.get("my/texture/name.png", Texture.class);
它也适用于其他类,如 map 集和皮肤。
关于android - 如何在 Libgdx 中处理 Sprite ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41349350/
我是一名优秀的程序员,十分优秀!