2014-09-28 80 views
2

我刚刚写了康威的Java游戏生活,我想在我的android手机(Nexus 4)上测试我的应用程序。 为了测试,我在我的SpriteBatch上绘制了一个BitmapFont,向我展示了FPS,陀螺仪,活细胞和其他数据。 在PC上,我有〜500到4000 FPS,这取决于我的GOL逻辑工作的速度。但是,如果我在Android上启动它,FPS将降至10-15。如果我用几乎全速的GOL逻辑关闭我的ShapeRenderer(这是我的主要类渲染所有GOL-Rectangles),FPS始终在60(我猜你不能关闭Nexus上的VSync 4)。LibGDX - ShapeRenderer太慢/ Android上的低FPS

所以,这里是我的问题: 为什么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

+2

我有我的Android手机上使用ShapeRenderer没有问题。你可以使用SpriteBatch.draw()渲染一个小的PNG纹理,而不是在每一帧上重新生成矩形?我不确定哪种效率更高,但值得一试。 – 2014-09-29 01:30:47

+2

首先,不要每帧创建一个新的Color对象大约一百万次。只需将颜色保存在一个变量中,您就可以轻松完成任务。否则你会有很多垃圾收集,这会降低性能。而且,你在RAM中创建了大量的对象,这也会降低性能。我不认为这是问题,但它已经有机会了。向我们展示全班。也许thtat有帮助。 – BennX 2014-09-29 15:30:45

+0

感谢你们俩。我现在绘制小的.png,并使用Color变量。在Android上,我终于有60 FPS,在我的PC上FPS-Rate增加了50-100%。 – 2014-09-29 23:02:45

回答