2

我会试着解释我的意思。我正在开发一个 2d 游戏。当我在小屏幕上运行下面的代码时,它比在大屏幕上运行相同的代码更快。我认为这取决于游戏循环的迭代在大屏幕上比在小屏幕上花费更多的时间。我如何实现time unit或其他不依赖于游戏循环的迭代?

private void createDebris(){
    if(dx<=0) return;
    if(stepDebris==2){          
        Debris debris = new Debris(gameActivity, dx-=1280*coefX/77, 800*coefY-50*coefY, coefX, coefY);
        synchronized (necessaryObjects) {
            necessaryObjects.add(debris);
        }
        stepDebris=-1;
        Log.e("COUNT", (count++)+"");
    }
    stepDebris++;
}

PS Debris 是在画布上绘制的视觉对象。我会很感激你的回答。谢谢。

4

3 回答 3

1

如果 stepDebris 是您在屏幕上移动对象的单位 - 那么每次绘制调用递增它是错误的,因为它将移动速率与帧速率联系起来。

你想要的是这样的

    stepDebris += elapsedMilliseconds * speedFactor

其中 elapsedMilliseconds 是游戏开始后经过的时间(以毫秒为单位)。一旦您为stepDebris找到正确的speedFactor - 无论帧率如何,它都会在不同的机器/分辨率上以相同的速度移动。

希望这可以帮助!

于 2012-06-06T14:11:41.130 回答
0

您可以通过测量执行实际迭代 (= y) 以及之后休眠 (xy) 毫秒所需的时间来使“迭代”花费 x 毫秒。

另请参阅本教程的第 3 步

于 2012-06-06T14:16:51.317 回答
0

Android 提供了实现定时事件循环的 Handler API 来控制计算的时间。 这篇文章很不错。

您将通过使用此接口实现帧速率控制器来节省电池寿命,而不是尽可能快地重绘。

于 2012-06-06T14:23:22.350 回答