繁体   English   中英

我的应用在某些Android设备上运行太快

[英]My app runs too fast on some Android devices

我刚刚发布了一个应用程序,避免尖峰! 在android市场上。 我的一些朋友已经在手机/平板电脑上下载了这些应用程序,但我听说它运行得太快了。 它在我的android(HTC Dream)上运行得很好。 有什么方法可以告诉它在某些android上运行的速度有多快,以及如何进行相应的调整? 我已经搜索了高低,但尚未找到答案。

我已经在Android Market上看到了您的游戏并进行了尝试。

您实际上无法确定在各种现有硬件上将获得的最小和最大速度,如下所示:

  • 每天都有新硬件出现在市场上
  • 在给定的硬件上,其他因素可能会影响应用程序的执行速度。

您应该做的是使游戏独立于帧速率。 为此,请避免在每次更新对象位置时使它们移动固定距离。 最好让它们以固定的距离移动一定的时间

为此,请在每次更新对象的位置时测量自上次更新以来经过的时间,并计算要移动到的距离。

这样,根据硬件的质量,这些对象将很好地跳跃或移动,但至少它们将以相同的速度移动或移动,而该速度将由您确定。 当您在新机器或旧机器上玩FPS游戏时,这有点相同:运动速度是恒定的,只有帧速率不是。 在旧机器上,您会感觉到对象会跳跃,而在新机器上,它们会优雅地移动,但是在两种情况下都可以工作(当然,在某些限制下,对于旧机器而言)。 这样一台机器永远不会太快。

为您提供一些伪代码,以使伞兵从屏幕的顶部滑落到屏幕的底部:

  • 这是要避免的循环:

     while (playing) { update_positions(); display(); } update_positions() { paratrooper.y -= 10; // the paratrooper's altitude decreases of 10 at each update } 

在速度较慢的硬件上,需要花费数小时才能穿越屏幕。 在快速的硬件上,这太快了,您甚至都不会看到伞兵掉下来。

  • 这是正确的方法:

     while (playing) { update_positions(); display(); } update_positions() { time_elapsed = getSystemTimeInMS() - lastUpdateTimeInMS(); paratrooper.y -= 0.01 * time_elapsed; // the paratrooper's altitude decreases of 10 per second setLastUpdateTimeMS(getSystemTimeInMS()); // This way it includes the calculation time } 

在速度较慢的硬件上,跨越整个屏幕可能需要15个显示器,而在速度较快的硬件上,则需要45个显示器,但是在每种情况下,伞兵的速度都将降至每秒10dp。

听起来您的应用是游戏吗? 如果是这样,您可能会有一个游戏循环,它会尽可能快地运行游戏。 我发现有关实现游戏循环的这篇文章非常有用: Game Loops ,当我创建涉及时间的游戏时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM