屏幕尺寸计算不正确

时间:2013-01-22 03:56:19

标签: android android-layout surfaceview

我最近一直在尝试使用与臭名昭着的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

一些图片

这是我的算法产生的:

enter image description here

但是,正如您所看到的那样,很明显您可以轻松在线的末端(右侧)至少再放置2个珠子。例如,这张图片显示了当我将一行中的珠子数量硬编码为比算法产生的数量多两倍时会发生什么:

enter image description here

这是带有红线详细边距的图像。如你所见,仍然有足够的空间:

enter image description here

补充资料

我正在Google Nexus 7上测试此应用程序。

我正在使用getResources().getDisplayMetrics().widthPixels;来获取屏幕的宽度。也许这个问题在这里?

我的问题

是否有一些我不考虑的分辨率值会影响结果?为什么计算得如此不准确?

如果您需要更多信息,我很乐意提供,任何帮助都将非常感激!

1 个答案:

答案 0 :(得分:2)

您的保证金是错误的。您上传了全尺寸图像,但如果您绘制@ 50px和750px的垂直线,它们会与绘图区域相交。因此,您要么在计算中使用错误的值,要么在其他地方使用应该是应该保证金的值。

enter image description here