【发布时间】:2014-11-18 01:03:16
【问题描述】:
我刚刚用 Java 编写了 Conway 的 Game of Life,我想在我的 android 手机 (Nexus 4) 上测试我的应用程序。 为了测试,我在 SpriteBatch 上绘制了一个 BitmapFont,显示 FPS、陀螺仪、活细胞和其他数据。 在 PC 上,我有 ~ 500 到 4000 FPS,这取决于我的 GOL 逻辑的工作速度。但是,如果我在 android 上启动它,FPS 会下降到 10-15。如果我用 GOL 逻辑几乎全速关闭我的 ShapeRenderer(这是我渲染所有 GOL 矩形的主要类),FPS 一直保持在 60(我猜你不能在 Nexus 上关闭 VSync 4).
所以,这是我的问题: 为什么 ShapeRenderer 效率如此之低?我还应该用什么来渲染我的形状?
我将发布我的(相当简单的)渲染代码和图片:
this.setColor(new Color(1, 0, 0, 1));
for (int i = 0; i < grid.getX_length(); i++) {
for (int j = 0; j < grid.getY_length(); j++) {
if (cells[i][j].getState()){ // checks if the cell is dead or alive
this.setColor(new Color (0,0,0,1));
rect(i * size, j * size, size-gap, size-gap); // draws it.
}
【问题讨论】:
-
我的 Android 手机上的 ShapeRenderer 没有任何问题。您可以只使用 SpriteBatch.draw() 渲染一个小的 png 纹理,而不是在每一帧上重新生成矩形?我不确定哪个会更有效,但值得一试。
-
首先不要每帧创建一个新的 Color 对象大约一百万次。只需将颜色保存在变量中即可。否则你会有很多垃圾收集,这会降低性能。此外,您在 RAM 中创建了大量对象,这也会降低性能。我不认为这是问题所在,但它可能已经有机会了。向我们展示整个班级。也许这会有所帮助。
-
感谢你们俩。我现在画小 .png 并使用颜色变量。在 android 上,我最终有 60 FPS,而在我的 PC 上,FPS 速率提高了 50-100%。
标签: android libgdx conways-game-of-life