0

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

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

这在我的测试手机(240x320)上运行良好,但在我朋友的屏幕更大(720x1280)的手机上尝试,坐标都是错误的,只占用角落里的一小块空间。如何调整我目前拥有的东西,使其适用于所有 android 设备,根据屏幕尺寸相应地缩放坐标?

4

1 回答 1

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 替换为平台的宽度和高度

重要提示: 以这种方式缩放坐标时,您需要缩放所有坐标。这意味着如果您使用坐标来检测边界和碰撞,则还必须相应地缩放以匹配。

这是另一篇关于如何获得安卓设备分辨率的文章。

获取屏幕分辨率

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

于 2013-05-27T07:29:15.187 回答