如何在显示器上移动角色,使其在所有设备上以相同的速度移动

时间:2013-08-13 18:34:05

标签: android

我正在设计我的第一款用于Android的2D游戏,在游戏中,每当执行一个循环时,通过使用一个简单的表达式,每次移动一个字符20像素        X = X + 20; 但是当我在手机上测试我的游戏时,我遇到的问题是屏幕尺寸为3英寸的reso 320 * 480,这个角色似乎移动得很快,但是在平板电脑上进行测试时,它的移动速度很慢。 所以我想知道如何移动一个角色,所以它似乎在低端设备和高端设备上以相同的速度移动,请告诉我逻辑,如果你用一些代码解释逻辑会更有帮助。

2 个答案:

答案 0 :(得分:2)

你的问题是你经常使用20作为你的移动速度。您需要生成相对于比例因子的移动速度。我不知道你如何以不同方式处理宽高比,但是例如我会假设你是letterboxing。

假设你是letterboxing,你需要设置相对于你想要的分辨率的比例因子,在你的情况下为320px。所以你应该这样做:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;

double scaleFactor = height / 320.0; /*// 480.0 if you're in landscape */

然后你可以做以下动作:

x += 20 * scaleFactor; /*// 20 is your move speed, the scaleFactor will make sure it scales across device sizes

注意: 根据您处理水平和垂直刻度的方式,您可能需要考虑两者以保持移动速度在设备上垂直和水平均匀,但这应该是一个良好的开端。

答案 1 :(得分:1)

您可以获得设备的宽度,然后将其除以某种东西(例如除以10表示10%或100表示​​100%),然后根据屏幕大小进行移动。角色仍然会以不同的方式移动,但它不会与设定的数量不同。要获得屏幕的宽度,您可以执行以下操作:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

然后执行以下操作:

x=x+(width*.01);

添加1%的屏幕