我的游戏基于lunarlander示例,自从我第一次开始制作以来就一直遇到口吃的问题。我没有尝试消除它们,所以我已经花了几个小时创建了精简版的lunarlander示例,并放了一个简单的滚动图像以显示口吃。注意:它与垃圾收集器无关。如果您认为确实如此,那么只需查看日志,垃圾收集器就会以出现断断续续的频率运行。

在我的手机上,向下滚动屏幕的图像大约每秒钟停顿约1/10秒(Motorola Milestone,2.2)。这种口吃并不能完全破坏游戏玩法,但会令人分心和沮丧。我的游戏还涉及很多快速滚动和快速移动,因此在那里通常更明显。

如果您有时间,可以快速浏览此Eclipse项目并查看是否:

  • 它会在您的手机上结结巴巴(滚动时仔细观察,每半秒钟到第二个半秒都有一个小障碍)
  • 如果可以看到解决口吃的
  • 的任何方法

    我希望我只是有一段迟钝的代码而导致整个事情,而我却没有意识到。我只是简直不敢相信,即使剥离了这么多的内容,它仍然具有与我的完整游戏(具有1000个对象)完全相同的口吃,尤其是因为它在我的手机上以稳定的60fps运行。

    编辑:在Traceview上分析了我的游戏,看起来不错。

    源码下载链接:http://dl.dropbox.com/u/4972001/LunarLander.rar

    最佳答案

    我在手机上(连结一个)尝试过,对我来说也一样。

    我进行了一些更改,这些更改对我来说更好:

  • 我没有在循环期间每次声明新变量,而是将as声明为类的属性。

    Canvas c = null;
    //变成

    私有(private) Canvas c;

    //现在在循环中只需使用

    c =空

  • 对您在doDraw和updatePhysics函数中一遍又一遍声明的所有变量执行此操作。
  • 而不是一直增加viewY,直到statemant我才放一点

    if(viewY> mCanvasHeight){
      viewY -= mCanvasHeight;
    


  • 我不确定它现在是否可以100%工作,但对我来说似乎好得多。

    08-18 11:50