我的游戏基于lunarlander示例,自从我第一次开始制作以来就一直遇到口吃的问题。我没有尝试消除它们,所以我已经花了几个小时创建了精简版的lunarlander示例,并放了一个简单的滚动图像以显示口吃。注意:它与垃圾收集器无关。如果您认为确实如此,那么只需查看日志,垃圾收集器就会以出现断断续续的频率运行。
在我的手机上,向下滚动屏幕的图像大约每秒钟停顿约1/10秒(Motorola Milestone,2.2)。这种口吃并不能完全破坏游戏玩法,但会令人分心和沮丧。我的游戏还涉及很多快速滚动和快速移动,因此在那里通常更明显。
如果您有时间,可以快速浏览此Eclipse项目并查看是否:
我希望我只是有一段迟钝的代码而导致整个事情,而我却没有意识到。我只是简直不敢相信,即使剥离了这么多的内容,它仍然具有与我的完整游戏(具有1000个对象)完全相同的口吃,尤其是因为它在我的手机上以稳定的60fps运行。
编辑:在Traceview上分析了我的游戏,看起来不错。
源码下载链接:http://dl.dropbox.com/u/4972001/LunarLander.rar
最佳答案
我在手机上(连结一个)尝试过,对我来说也一样。
我进行了一些更改,这些更改对我来说更好:
Canvas c = null;
//变成
私有(private) Canvas c;
//现在在循环中只需使用
c =空
对您在doDraw和updatePhysics函数中一遍又一遍声明的所有变量执行此操作。
if(viewY> mCanvasHeight){
viewY -= mCanvasHeight;
我不确定它现在是否可以100%工作,但对我来说似乎好得多。