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

1 android

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

Shl*_*blu 5

我在Android Market上看过你的游戏并试过了.

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

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

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

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

这样,根据硬件的质量,这些物体会很好地跳跃或移动,但至少它们会以相同的速度移动,这个速度将由你决定.当你在一台全新机器或旧机器上玩FPS游戏时,这有点相同:运动的速度是恒定的,只有帧速率不是.在旧机器上你会得到物体跳跃的印象,而在新机器上它们会优雅地移动,但它在两种情况下都有效(当然,对于旧机器来说,在某些限制内).一台机器永远不会太快.

为了给你一些伪代码,一个伞兵从屏幕的顶部落到底部:

  • 这是要避免的循环:

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

在慢速硬件上,跨屏幕需要数小时.在快速的硬件上,这将太快,你甚至不会看到伞兵下降.

  • 这是正确的方法:

    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
    }
    
    Run Code Online (Sandbox Code Playgroud)

在较慢的硬件上,穿过整个屏幕可能需要15个显示器,而在快速硬件上则需要45个显示器,但在每种情况下,你的伞兵都会以每秒10dp的速度下降.