java - LibGDX:循环时使用 SpriteBatches

标签 java android performance libgdx sprite

我有一个 2d Sprite 数组,其中包含大约。 50 个 Sprite 。我想在渲染方法中绘制它们。我不知道什么会给我最好的表现。这是我想出的两种选择:

batch.begin();
for(Sprite[] row : sprite2d) {
    for(Sprite cell : row) {
        cell.draw(batch);
    }
}
batch.end();

或者:

for(Sprite[] row : sprite2d) {
    for(Sprite cell : row) {
        batch.begin();
        cell.draw(batch);
        batch.end();
    }
}

我想第一种选择更好,因为我不会一遍又一遍地开始批处理。另一方面,我不确定在 batch.begin() - batch.end() 部分内循环是否是好的做法。

或者是否有另一种性能更好的替代方案?

感谢您的回答,

托尼

最佳答案

您绝对应该更喜欢第一个变体。 SpriteBatch 将在必要时在内部将调用打包发送到 OpenGL。如果您调用 batch.end(),您将强制 SpriteBatch 在每个循环期间发送挂起的 OpenGL 命令。

昂贵的代码包含在私有(private)方法 SpriteBatch#renderMesh() 中,每次需要刷新 OpenGL 命令时,SpriteBatch 都会自动调用该方法。如果您出于任何原因需要刷新命令,您也可以通过调用 SpriteBatch#flush() 显式地执行此操作,这仍然比通过调用 SpriteBatch#end 结束 SpriteBatch 更便宜()

关于java - LibGDX:循环时使用 SpriteBatches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21657730/

相关文章:

sql - MSSQL中CTE、临时表和表变量的区别

performance - 对x86上的L1缓存行的独占访问?

java - 如何使用 Selenium 和 Serenity 获取特定 css 中的菜单项

c# - 如何使用字符串 JSON 响应压缩 ASMX 数据(C# Web 服务)

安卓 : Finish Activity from other Activity

java - 如果太长,文本对齐和切割

mysql - sql View 是正确的解决方案吗

java - 如何使用 Java Webapp 将文件上传到 MongoDB?

java - 滚动 JPanel

java - 如何通过不同Java类中的方法更改对象值