【问题标题】:Screen Dimensions Being Calculated Incorrectly屏幕尺寸计算不正确
【发布时间】:2013-01-05 06:10:11
【问题描述】:

我最近一直在尝试使用与臭名昭著的 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; 来获取屏幕的宽度。也许问题就在这里?

我的问题

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

如果您需要更多信息,我很乐意提供,我们将不胜感激!

【问题讨论】:

  • 当我忘记考虑像素密度时遇到了类似的问题。不确定这是否与您正在做的事情有关,但可能值得研究。
  • 是的,这就是我正在考虑的。像素密度和分辨率异常可能会导致空间损失。除非我非常确定情况确实如此,否则我会担心采用这条路线,但是,因为独立于像素密度渲染图形所涉及的复杂性。
  • Check out these answers 获取一些快速转换方法。
  • 非常有趣的帖子 - 已添加书签!我尝试实现这些方法,但是很可惜,它们只是使我的图像显着膨胀或缩小。我认为这是一个很好的途径,我将继续测试,直到找到解决方案!

标签: android android-layout surfaceview


【解决方案1】:

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

【讨论】:

  • 你能稍微改一下吗?我对你的意思感到困惑。不过,让我在此期间画一些线。
  • @Squaagem 查看图像编辑,我认为这可以解释。红线是您设置边距的位置(左侧 50 像素,右侧 50 像素)
  • @Squaagem 左边的图像似乎是在边缘边缘绘制的,应该是在边缘边缘绘制的。
  • 嗯,我已经按照你所说的在边缘实现了线条(参见编辑后的答案,第三张图片),虽然它们 是用它们的中心在边缘绘制的,这不解释丢失了两个额外的列?还是我还缺少什么?
  • @Squagem 是的,它解释了它。你的眼睛也可能在欺骗你——700 / 44 = 15.9,所以当你把边距弄平时,左边的空白空间将是珠子的 90%,看起来可能适合,但它不会完全适合。
猜你喜欢
  • 2019-11-24
  • 2013-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多