【问题标题】:LibGDX - ShapeRenderer is too slow / Low FPS on AndroidLibGDX - ShapeRenderer 在 Android 上太慢/低 FPS
【发布时间】: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.
                } 

(http://s14.directupload.net/images/140929/qc3uu8ew.png)

【问题讨论】:

  • 我的 Android 手机上的 ShapeRenderer 没有任何问题。您可以只使用 SpriteBatch.draw() 渲染一个小的 png 纹理,而不是在每一帧上重新生成矩形?我不确定哪个会更有效,但值得一试。
  • 首先不要每帧创建一个新的 Color 对象大约一百万次。只需将颜色保存在变量中即可。否则你会有很多垃圾收集,这会降低性能。此外,您在 RAM 中创建了大量对象,这也会降低性能。我不认为这是问题所在,但它可能已经有机会了。向我们展示整个班级。也许这会有所帮助。
  • 感谢你们俩。我现在画小 .png 并使用颜色变量。在 android 上,我最终有 60 FPS,而在我的 PC 上,FPS 速率提高了 50-100%。

标签: android libgdx conways-game-of-life


【解决方案1】:

我不知道矩形,但我遇到了与圆形相同的问题。画一个圆要花这么多时间的Reoson是它画了很多单线来形成一个圆。

参考源代码: https://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/glutils/ShapeRenderer.java#L833

【讨论】:

    猜你喜欢
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-08
    相关资源
    最近更新 更多