我最近一直在尝试使用与臭名昭著的 LunarLander 类似的方法来实现我的第一个 Android 游戏。我在没有游戏引擎帮助的情况下自己渲染图形,这似乎是迄今为止最复杂的部分。
问题
我正在确定屏幕的宽度,并将该信息转发到一个算法中,该算法确定在给定宽度和一些其他边距值的情况下可以水平渲染的图像的最大数量(见calculateMaxBeadsInWidth()
下文)。但是,数学似乎与算法计算的值不匹配。基本上,它决定了只能X
显示一定数量的图像,而实际上X + 2
图像可以很容易地显示在屏幕上。
计算
我已经解析了许多调试输出,显示屏幕的实际宽度是800 pixels
,而图像宽度是44 pixels
。所以,鉴于边距是100 pixels
(50 pixels
在最左边和50 pixels
最右边),剩下的就700 pixels
可以使用了。现在,floor(700 / 44) = 15
,所以只显示了 15 张图像。但显然还有更多空间(见图片)!
编码
我的算法:
private int calculateMaxBeadsInWidth() {
float eff_width = screenWidth - (BOARD_MARGIN_HORIZONTAL * 2);
return (int) (eff_width / bead_width);
}
请注意, 的BOARD_MARGIN_HORIZONTAL
值为50.0f
。
一些图片
这是我的算法产生的:
但是,正如您所看到的,很明显,您可以轻松地在线条末端(右侧)再安装至少 2 个珠子。例如,这张图片显示了当我将一行中的珠子数量硬编码为比算法产生的多两个时会发生什么:
这是边缘用红线详细说明的图像。如您所见,仍然有足够的空间:
补充信息
我正在 Google Nexus 7 上测试这个应用程序。
我getResources().getDisplayMetrics().widthPixels;
用来获取屏幕的宽度。也许问题就在这里?
我的问题
是否有一些我没有考虑到的影响结果的分辨率值?为什么这个计算如此不准确?
如果您需要更多信息,我将很乐意提供,任何帮助将不胜感激!