如何调整我的关卡程序,以便它适用于所有Android手机?

时间:2013-05-26 23:29:34

标签: java android eclipse mobile

我正在制作游戏(只使用eclipse和android sdk),并且我有基于文本文件输入的关卡构建功能。

因此,例如,“levelone.txt”可能包含“[2,5],[14,7],[10,9]”。加载此文件时,将创建3个平台并将其发送到这些位置。

这在我的测试手机(240x320)上工作正常,但是在我的朋友手机上尝试使用更大的屏幕(720x1280)时,坐标都错了,只占据了角落里的一小块空间。我怎样才能调整我到目前为止的功能,以便它适用于所有Android设备,根据屏幕尺寸相应地缩放坐标?

1 个答案:

答案 0 :(得分:2)

扩展您的关卡加载器背后的数学实际上非常简单。 首先,您应该从选择默认比例开始。含义取决于您的240x320屏幕分辨率以及平台的坐标和尺寸

现在要扩展它,我们应该知道游戏运行的设备的屏幕分辨率。以下内容将为您获取屏幕分辨率:

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

如果你的目标是API 13,那么就不能使用display.getSize,而是应该使用:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();
int height = display.getHeight();

现在我们有了新的分辨率,我们可以找到默认(240x320)分辨率与新设备分辨率之间的比例差异:

float xScale = (float)width / 240.0f;
float yScale = (float)height / 320.0f;

强制将这些值强制为浮点数或双精度数是很重要的,因为它将它们保留为整数然后它将无法正确缩放,因为小数值将被省略,并且您将得到一个舍入的整数数。哪个不准确,不允许正确缩放。

获得比例后,您可以开始调整大小并相应地移动对象。

例如,如果您的第一个平台的位置是

int x = 200;
int y = 120;

然后你只需要取这些值并将它们乘以比例:

int x = (int)(200 * xScale);
int y = (int)(120 * yScale);

您还需要针对平台的尺寸执行此操作:

int width = (int)(30 * xScale);
int height = (int)(15 * yScale);

用平台的宽度和高度替换30和15

重要: 以这种方式缩放坐标时,您需要扩展所有坐标。这意味着如果您使用坐标来检测边界和碰撞,那么也必须相应地进行缩放以匹配。

这是关于如何获得Android设备解析的另一篇文章。

Getting screen resolution

希望这会有所帮助,祝你好运。