我正在制作游戏(只使用eclipse和android sdk),并且我有基于文本文件输入的关卡构建功能。
因此,例如,“levelone.txt”可能包含“[2,5],[14,7],[10,9]”。加载此文件时,将创建3个平台并将其发送到这些位置。
这在我的测试手机(240x320)上工作正常,但是在我的朋友手机上尝试使用更大的屏幕(720x1280)时,坐标都错了,只占据了角落里的一小块空间。我怎样才能调整我到目前为止的功能,以便它适用于所有Android设备,根据屏幕尺寸相应地缩放坐标?
答案 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设备解析的另一篇文章。
希望这会有所帮助,祝你好运。