在过去6个月左右的时间里,我一直在开发Android游戏,并且已经多次在这里发布了关于我无法摆脱的各种滞后问题.
我最终抓住LunarLander示例并将其剥离到其核心组件,看看我是否可以做任何不滞后的事情.它真正做的就是改变画布每帧翻译的数量,然后在画布上绘制背景.即使这样,就像SurfaceView应用程序一样简单 - 口吃......
我的游戏是一个滚动游戏,你不断向上移动屏幕(想想一个飞行游戏),但我目前正在做背景的方式导致每隔一秒左右持续口吃大约50-100ms.这不是游戏破坏,但它非常分散注意力,使游戏看起来好像是由一个完整的白痴编程(虽然我开始怀疑这可能是这种情况).
不,它不是垃圾收集器,在游戏运行循环期间根本没有创建新对象,并且在游戏运行时GC几乎没有运行.
我几乎是在沮丧地撕扯我的头发.我花了40多个小时试图摆脱这个简单的应用程序示例在过去一周的滞后,这让我发疯.一个简单的应用程序如何与我链接的应用程序可能存在延迟问题?你不会认为滚动背景会比那简单得多......
注意:此演示不断在我的手机上获得大约60fps(摩托罗拉里程碑).取消注释示例中的FPS代码以查看FPS.
TL; DR:非常简单的程序,只是一个滚动的背景显示口吃.请看一看...
链接下载基于LunarLander示例的简单口吃示例:http://dl.dropbox.com/u/4972001/LunarLander.rar
我已经下载了带有滚动背景(看起来像草地)的 RAR 文件,并将其安装在我的摩托罗拉 Droid 上。
当它滚动时,我感觉不到任何卡顿,我已经看了一分多钟了。
根据您的描述,我敢打赌 Milestone 硬件/平台存在一些奇怪的视频绘制/计时问题。
也许解释是这样的:Milestone 的显示刷新频率为 60 Hz(只是在这里选择一个数字,我不知道它到底是什么),而你的帧速率只是稍微偏离这个值 - 比如说 63 或 57 Hz ...是否无法想象,大约每秒一次的绘制时间和硬件显示更新的时间不匹配,以至于背景无法重新绘制一次,并且必须等到你的下一帧?有时,时间排列得足够好,以至于您可能会错过连续两到三个绘制的时间(取决于您的帧周期与实际屏幕刷新周期的距离)。
编辑:实际上,我又看了一分钟,我确实看到了一个非常短的(只是可察觉的)口吃。
| 归档时间: |
|
| 查看次数: |
2169 次 |
| 最近记录: |