最近我尝试使用类似于著名的 LunarLander 的方法来实现我的第一个 Android 游戏。我正在自己渲染图形,没有使用游戏引擎,这似乎是目前为止最复杂的部分。
问题
我确定了屏幕的宽度,并将该信息转发到一个算法中,该算法根据宽度和一些其他边距值(参见下面的 calculateMaxBeadsInWidth()
)确定可以水平渲染的最大图像数量。但是,计算出的值似乎与算法计算的值不匹配。基本上,它确定只能显示 X
张图片,当实际上屏幕上可以轻松显示 X+2
张图片。
计算
我已经解析了许多调试输出,显示屏幕的实际宽度为800像素
,图像宽度为44像素
。因此,给定边距为100像素
(50像素
在最左侧和50像素
在最右侧),还剩下700像素
可以使用。现在,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
。
一些图片
这是我的算法生成的内容:
但是,正如你所看到的,很明显你可以在行末轻松地再放置至少两个珠子(在右侧)。例如,当我将一行中的珠子数量硬编码为比算法生成的多两个时,下面的图片展示了会发生什么:
下面的图片详细展示了边距的红线。正如你所看到的,还有很多空间:
补充信息
我正在Google Nexus 7上测试此应用程序。
我使用getResources().getDisplayMetrics().widthPixels;
来获取屏幕的宽度。也许问题就出在这里?
我的问题
是否有一些分辨率值我没有考虑到,从而影响了结果?为什么计算结果如此不准确?
如果需要更多信息,我会很乐意提供。非常感谢您的帮助!