我刚刚在Android上开发了我的迷你游戏,我遇到了一些关于性能和一般“如何”的问题:
如果我在屏幕上有25+对象(只是一个7-8角度的多边形),那么它的开始就很慢,而且的CPU使用率很高(15-20%没有结合力检测,高达50%,三星笔记本10.1平板电脑上有碰撞检测)。
所以我有25个多边形(小行星),它们总是在“飞行”。所以,为了移动它们,我做了一个定时器,,对吗? On TimerTask,我有这样的东西
public void move() {
translate[1] += speed[1];
translate[0] += speed[0];
updateTranslateMatrix(); // updating translate matrix and then send it into vertex shader
updateAABBCoords(); // update coordinates of Axis-aligned bounding box
updateCoordsByTranslate(); // update coordinates of verticles (to be able to define exact collision (with bullets and starship))
},这种方法中是否有不必要的?
另外,我想问一下,如果每17毫秒运行一次这个定时器,是否是?还是17毫秒太频繁了?我只有在17毫秒时才能感觉到运动的流畅性,也许是我做错了吗?和相同的计时器间隔,我在星际飞船/子弹的移动和碰撞检测上。。
帮帮我求你了。我想错过一些巨大和基本的东西,因为50%的CPU注10.1在那个简单的小行星游戏是不正常的。
发布于 2014-04-01 13:54:59
我相信,一个关键的问题是,您要为每个对象分配一个单独的Timer,而不是使用一个通用的游戏循环。绝大多数游戏使用一个连续运行的游戏循环,通常可以分为两个组件:更新和渲染。
一篇关于Java/Android基本游戏循环设计的文章
基于gamedev.stackexchange.com的游戏回路设计相关问题的回答
在使用游戏循环时,不能保证每17 or或其他任意时间更新一次。相反,更新和呈现方法接收一个DeltaTime参数,这是自上次帧开始的时间。
例如,当通过将物体的速度乘以得到新的物体位置时,就会用到这个方法。这样做可以平滑地插值位置,并确保目标速度不受CPU速度的影响。
https://stackoverflow.com/questions/22787286
复制相似问题