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

时间:2011-08-27 16:15:14

标签: android

我刚发布了一个应用程序,避免尖峰!在Android市场上。 我的一些朋友已经在他们的手机/平板电脑上下载了应用程序,我被告知它运行得太快了。它在我的android(HTC Dream)上运行得很好。有没有办法告诉它在某些机器人上运行的速度有多快,以及如何相应地调整它?我已经搜索过低和高,还没有找到答案。

2 个答案:

答案 0 :(得分:5)

我在Android电子市场上看过您的游戏并尝试过它。

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

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

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

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

这样,根据硬件的质量,这些物体会很好地跳跃或移动,但至少它们会以相同的速度移动,这个速度将由你决定。当你在一台全新机器或旧机器上玩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次显示,但在每种情况下,你的伞兵都会以每秒10次/秒的速度下降。

答案 1 :(得分:2)

听起来你的应用程序是游戏吗?如果是这样,你可能有一个游戏循环,只是尽可能快地运行游戏。我发现这篇关于实现游戏循环的帖子非常有用:Game Loops,当我创建涉及时间的游戏时。