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

标签 android sprite android-canvas

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

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

下面是一些关于我如何实现移动的代码:

Sprite 类。

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

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

绘制 Sprite

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

当onTouch被触发时(Jumping)

bird.gravity=30;

最佳答案

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

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

y = bird.y * worldToPixels;

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

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

最后,如果您尝试为多种设备制作游戏,最好使用像 libGDX 这样的库。 .有很多有用的类(class),例如 ViewPorts使这更容易。

关于android - 每个设备上的速度和距离都不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28516595/

相关文章:

java - Android Eclipse - 随机数

c++ - 调用 glDrawArrays 后出现 SegFault

android - 从 MainActivity 刷新 fragment View

android - Android-刷新Facebook AccessToken

java - 当相机平移时, Sprite 不会跟随 box2d 主体,但如果相机在 libgdx 中是静态的,则效果良好

java - 通过触摸检测位图中的颜色

java - Android - 以平滑的角色移动在 Canvas 上绘制迷宫

java - 从旧 Canvas 上绘制 - Android

android - 我怎样才能从 WebView 中获取 MIME 类型?

html - CSS Sprite 翻转显示垂直而不是水平