android – 屏幕尺寸计算不正确

我最近一直试图使用与臭名昭着的LunarLander类似的方法来实现我的第一个
Android游戏.我在没有游戏引擎的帮助下自己渲染图形,这似乎是迄今为止最努力的部分.

问题

我正在确定屏幕的宽度,并将该信息转发到算法中,该算法确定在给定宽度和一些其他边距值的情况下可以水平渲染的最大图像数量(请参阅下面的calculateMaxBeadsInWidth()).但是,数学似乎与算法计算的值不匹配.基本上,确定只能显示X量的图像,而实际上X 2图像可以容易地显示在屏幕上.

计算

我解析了许多调试输出,显示屏幕的实际宽度为800像素,图像宽度为44像素.因此,假设边距为100像素(最左边50像素,最右边50像素),则可以使用700像素.现在,楼层(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;获得屏幕的宽度.也许问题出在这里?

我的问题

我在这里没有考虑到一些影响结果的分辨率值吗?为什么计算得如此不准确?

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

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

点赞