不同屏幕尺寸的精灵速度

时间:2015-01-02 00:26:12

标签: java android performance sprite frame-rate

我试图理解支持不同屏幕尺寸的游戏中的速度概念(在android中)。

假设我有一个Sprite,从横向模式的右端到左端需要10秒钟。 帧速率不稳定所以有时它会持续30分钟然后突然变为10.但是我仍然希望我的精灵从一端花费10秒到其他。我该怎么做?

final int time = 10; //time from one end to the otehr
float baseSpeedX = screenWidth / time;
float currentFrameRate = 30.0; //just as an example
float baseFrameRate    = 50.0; //the frame rate we want
float factor = baseFrameRate / currentFrameRate;
playerSpeedX += baseSpeedX * factor;

这就是我的理解:
通过将屏幕宽度除以 time 来获得基本速度,您希望从一端到另一端获取精灵。如果有稳定的帧速率,基本速度是Sprite每秒应该添加到当前位置的速度。但是,我不知道如何实现这一点,所以我只得到当前帧速率并除以基本帧速率,我们真正想要的帧率游戏,以获得我们乘以基本速度的因子。

如果确实有效,那么Sprite会在10秒内到达另一端,对吧?即使我们的帧速率为10秒持续2秒,然后50帧速率持续8秒。现在帧速率越高,Sprite距离越大,帧速率越低,Sprite距离越大。

如果这一切都有效,那么它是否可以在游戏中使用?或者获取精灵速度是完全错误的方法吗?

1 个答案:

答案 0 :(得分:1)

您走在正确的轨道上

通常当你移动精灵时,你需要设置一个方法,以便当有更高的fps时精灵移动更慢,并且当有更低的fps时移动更快。这可以通过将另一个名为variable的{​​{1}}与您的baseSpeed相乘来完成。在这种情况下,Delta是从当前帧和前一帧所花费的时间。有了这个,具有高fps的游戏将具有低delta,因为从一帧到另一帧需要很短的时间。遵循这种模式,低fps游戏将看到大量的delta。通过计算增量,您可以使精灵在不同的fps目标上具有相同的速度。您通常可以通过减去当前时间和上次渲染时间来计算delta。

理论上,如果你使用你的delta公式(乍一看似乎是合理的)并将其与增量相乘,你将获得速度:

baseSpeedX