Android实时游戏 - 实现时间单位

时间:2012-06-06 14:06:07

标签: android real-time

我会试着解释一下我的意思。 我正在开发一款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++;
}

P.S。碎片是在画布上绘制的视觉对象。我很感激你的回答。感谢。

3 个答案:

答案 0 :(得分:1)

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

你想要的是这样的

    stepDebris += elapsedMilliseconds * speedFactor

其中elapsedMilliseconds是自游戏开始以来经过的时间(以mS为单位)。一旦为 stepDebris 找到正确的 speedFactor ,它将在不同的机器/分辨率上以相同的速度移动,而不管帧速率如何。

希望这有帮助!

答案 1 :(得分:0)

你可以通过测量实际迭代(= y)和之后睡眠(x-y)毫秒所需的时间来使'迭代'花费x毫秒。

另见step 3 of this tutorial

答案 2 :(得分:0)

Android提供了Handler API,它实现了定时事件循环,以控制计算的时间。 This article非常好。

通过使用此界面实现帧速率控制器,您可以尽可能快地重新绘制,从而节省电池寿命。