我正在为android开发一个非常简单的物理游戏,在这个游戏中,一个物体在重力作用下上下弹跳(0摩擦力,球应该总是达到相同的高度)。我希望它在所有设备上达到相同的高度(密度无关)。我的游戏是用以下物理编码的,在540*960设备上运行得非常好。
注意:我的游戏最大每秒30帧
物理编码

    //Instance variables
    private final float acceleration = .1f;
    private static float timePoint;
    private float velocityY = 0;

    //game loop code
    timePoint += 1;//updates every tick
    velocityY = velocityY - acceleration * timePoint;
    position.y = (int) (position.y - velocityY);
    if(position.y + bitMapHeight <= 0){
      velocityY = 30;
      timePoint = 0;
    }

当球碰到地面(y=0)时,我简单地应用30的速度,这使得球在540*960设备上达到所需的高度。当然,多个设备会导致严重的头痛,而且这个公式不会适用于所有设备。我认为最好的方法是根据屏幕的高度来计算速度,但我不确定这样做的最佳方法是什么。下面是一些屏幕截图显示发生了什么。
如果有人能指点我正确的方向,我将非常感激!如果需要更多的细节,请告诉我。

最佳答案

我不得不解决一个类似的问题,在二维游戏我正在工作前一段时间。
我在自己的android设备上开发了最初的物理和渲染功能,直到它在特定设备上表现良好为止。然后,我获得了相关变量的“基线”值(如bjb568中提到的像素:米),以在我的基线设备上获得正确的速度。
然后,为了让游戏在不同的设备/屏幕上以相同的方式运行,我只使用了根据实际屏幕分辨率和基线屏幕分辨率的比率缩放的基线值。
我的游戏使用了surfaceview,所以“实际屏幕分辨率”基本上是由曲面的宽度和高度决定的。
我希望这会有帮助。

07-28 03:46
查看更多