每个设备上的速度和距离都不一样

Speed and distance not same on every device

我用canvas创建了一个Android游戏,但在测试时,我发现飞起来或掉下来等动作的速度和距离设置在a上phone 分辨率为 1920x1080 (401 ppi)。但是当我在分辨率为 480 x 854 (196 ppi) 的较小 phone 上进行测试时,我发现精灵的移动速度更快,这影响了游戏玩法。例如。主角精灵跳得比我想要的高很多

有什么方法可以使所有设备尺寸和类型的速度和距离保持一致?

以下是我如何实现移动的一些代码:

精灵 class.

//class variables
private int GRAVITY_LIMIT = -30;
public int gravity = 0;

//gravity
if(gravity>GRAVITY_LIMIT){
   gravity= gravity-2;
}
//fall
y= y-gravity;

绘制精灵

canvas.drawBitmap(bmp1, x, y, null);

当onTouch被触发时(跳跃)

bird.gravity=30;

您应该以世界坐标为基础进行移动。例如,将你的世界设置为 10 米 x 10 米,这样当你跳跃时,你就跳了 1 米。然后您需要将该世界映射到屏幕像素。

float worldHeight = 10f;
float worldToPixels = screenHeight/worldHeight;

y = bird.y * worldToPixels;

因此,在 500px 高度的屏幕上,您将跳转 50px,而在 1000px 高度的屏幕上,您将跳转 100px。

重力和其他力也需要基于世界,才能在所有设备上发挥作用。

最后,如果您尝试为多种设备制作游戏,最好使用 libGDX. There are lots of helpful classes like ViewPorts 这样的库来简化此过程。

我找到了另一个解决方案。 这个效果不错。

 y= y-(gravity * game.getResources().getDisplayMetrics().density);