多种屏幕分辨率/纵横比(游戏)

Posted

技术标签:

【中文标题】多种屏幕分辨率/纵横比(游戏)【英文标题】:Multiple screen resolutions/aspect ratios (games) 【发布时间】:2011-10-27 00:53:44 【问题描述】:

编辑:感谢您的所有回答和 cmets。 在考虑之后,我会将问题的核心改写为:“如何确定和限制我的游戏能够运行的最小分辨率/比率”。因为 imo 要么游戏在最小的屏幕/比率(缺乏细节)上变得无法玩,要么即使支持最小的屏幕/比率也会显着降低所有其他游戏的体验。此外,我们甚至不知道最小分辨率是什么,或者除了禁用 ldpi 之外可以以任何方式限制它......这仍然没有告诉我们最小的 mdpi。毕竟我不是在想如何创造一个好的结果,而是如何创造一个完美的结果;)。猜猜这是不可能的(还没有?)。

注意:这纯粹是关于手机而不是平板电脑 此外,这个问题与应用程序无关,因为它与不使用 android 布局系统的游戏有关。

我总是发现预期哪些决议的定义有些模糊。 我知道文档中的list。

现在我的第一个问题是这个列表是否完整,或者换句话说,制造商是否允许使用其他分辨率或纵横比。 我目前的方法是根据长宽比来查看这个列表,看起来像这样(不确定它是否准确,但你明白了):

ldpi:最小纵横比 4:3 mdpi:最小纵横比 3:2 hdpi:最大纵横比 16:9

因此,如果我想涵盖一系列设备,我会弄清楚我的最小和最大纵横比是多少,并设计最小的布局,同时使其自动增长到最大。 例如,如果我想支持所有密度,我将屏幕设计为 4:3 并使其增长到 16:9。如果我删除 ldpi 支持,我会为 3:2 设计。 当然,这是假设永远不会有纵横比为 4:3 的 mdpi 设备,这让我们回到我的第一个问题。

我首选的解决方案是在 Android Market 上指明我的应用程序可以处理哪些纵横比,但目前看来这似乎不可能。

有人有更好的方法吗? (请记住,它仅适用于手机游戏)

【问题讨论】:

那么屏占比会如何影响布局呢?仅仅是图像和组件的大小,还是宽手机与短手机的布局完全不同? 从***的图片中可以看出,屏幕比例只会让屏幕空间变宽。我不创建多个布局,而是确保所有内容都适合最小的布局,然后我实现了一些从最小到最大的无级增长......但当然在 OpenGL 中......类似于 android:weight 的东西。跨度> 知道了。我在想,如果您使用 Android Java 实现此功能,您可以简单地获取屏幕比例并根据该比例缩放所有图像或对象。 我想通了。我只是想确定我不仅误解了这一行,而且您对 Java 感兴趣 - 这种误解是没有人提供答案的原因。 从游戏开发的角度来看,也对此感兴趣。这不仅仅是缩放布局的情况,因为我们有多个层,其中一些是固定的(即重叠的 HUD 图像,水平拉伸看起来很糟糕),其中一些自然地应对方面的变化(例如一个层是只是一个更大场景的视图:改变纵横比只会改变视口的大小,并允许观察或多或少的场景)。 【参考方案1】:

我找到了问题的明确答案。

在 3.0 之前未定义最低分辨率。 因此对于 3.0 及更高版本,可以选择最小分辨率,基于它设计游戏并在 superM 和其他人提到的更大屏幕/比率上动态扩展布局。

当您针对不同的屏幕尺寸设计用户界面时,您会发现 每个设计都需要最少的空间。所以,每个广义 上面的屏幕尺寸具有定义的关联最小分辨率 由系统。这些最小尺寸以“dp”为单位——相同的单位 你应该在定义你的布局时使用——它允许系统 不必担心屏幕密度的变化。

xlarge 屏幕至少为 960dp x 720dp 大屏幕至少为 640dp x 480dp 普通屏幕至少为 470dp x 320dp 小屏幕至少为 426dp x 320dp

注意:这些最小屏幕尺寸在之前没有得到很好的定义 Android 3.0,所以你可能会遇到一些被错误分类的设备 在正常和大之间。这些也是基于物理 屏幕分辨率,因此可能因设备而异——例如 带系统栏的 1024x720 平板电脑实际上空间较小 由于它被系统栏使用,因此可供应用程序使用。

Source

【讨论】:

其实有很多方法可以处理这些情况。您可以应用许多不同的选项来处理所有不同的纵横比,并为您的资产选择正确的纹理分辨率。我写了一篇文章可以帮助你:alexis.pautrot.com/dealing-with-different-screen-sizes Alexis 的链接已失效。【参考方案2】:

您可以根据屏幕分辨率限制哪些设备可以在市场上看到您的游戏:http://developer.android.com/guide/appendix/market-filters.html

我还没有完全深入研究它,但很遗憾我看不到任何关于纵横比的提及,所以你可能必须填写所有你知道会起作用的内容。

如果做不到这一点,您可以设置使图形看起来不错所需的最低分辨率,如果您不想将游戏更改为较小的比例,则可以像在主机游戏中那样添加黑色边框。不过不推荐,手机屏幕空间太宝贵了,所以如果你用黑条把游戏区切掉,我会把你的HUD移到黑色区域,这样你仍然尽可能多地使用屏幕。

这里有更多关于支持屏幕尺寸的信息:http://developer.android.com/guide/practices/screens_support.html

:D

【讨论】:

我刚刚找到了答案。但似乎你错了。最低分辨率在 3.0 之前未定义,我没有看到任何基于分辨率限制的工具。 我没有在市场上提交任何东西,如果这有误导性,我深表歉意。正如您所说,在 3.0 之后,您可以根据一般尺寸而不是特定分辨率进行限制。它似乎为您指明了正确的方向,但祝您在接下来的比赛中好运。 不幸的是,它并没有太大变化,因为 3.0 是一个仅限平板电脑的系统,并且可能在 4.0 之前不会与手机版本的 Android 合并。【参考方案3】:

正如这里许多人之前提到的,我的方法也是充分利用与设备无关的组件,例如 paddin、margin 和 relativelayouts,并结合设备独立像素。

坦率地说,我希望我不是唯一一个,但充分利用 DIP(设备独立像素)和相对布局等......已将我的活动布局文件减少到每个活动 1 个,而不是3种不同的HDPI、MDPI和LDPI。

如果您真的关心宽高比,您可以随时调用设备的显示属性(以像素为单位),并根据这些数字进行适当的布局计算。您可以在第一个活动的 onCreate 方法开始时调用它。

Display display = getWindowManager().getDefaultDisplay(); int displayWidth = display.getWidth(); int displayHeight = display.getHeight();

这将为您提供硬件 siplay 的宽度和高度值(以像素为单位)。 在我看来,选择 3 种以上布局类型的真正原因是确保图像分辨率保持足够锐利。

使用这些数字,您可以创建一些内部逻辑,计算要在某些小部件中加载的分辨率图像类型。从而省去了制作3次相同布局的麻烦....

可能解释得有点神秘,但克服各种设备分辨率的主要问题是大量使用:

相对布局 与设备无关的像素

您还可以在 XML 布局中定义 DIP,因此每个组件在每种类型的设备上看起来都是一样的。

也许是一个愚蠢的例子,但是嘿,它对我有用:-) 在下面,我试图让 textview 上的文本大小在所有设备上都相对相同。您可以调用“TypedValue”类,并从那里提供的众多公共变量中进行选择。因为我想让 TextView 到处都是相同的相对大小,所以我使用了下面的代码:

someTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);

数字用于设置 DIP 的大小。 TypedValue 可用于许多需要 INT 值作为维度属性的小部件或活动组件。玩它,你会发现它让生活变得更轻松:-p

希望这个答案能有所帮助

【讨论】:

您的方法适用于应用程序,但不适用于大多数游戏。但是,由于答案和 cmets,我将问题的核心改写为:“如何确定和限制我的游戏能够运行的最小屏幕尺寸”。因为 imo 游戏要么在最小的屏幕上变得无法玩(缺乏细节),要么即使支持最小的屏幕也会显着降低所有其他游戏的体验。此外,除了禁用 ldpi 之外,我们甚至不知道最小分辨率是什么,或者可以以任何方式限制它......这仍然没有告诉我们最小的 mdpi。 那么,我想这一切都是为了在生活中做出选择...... OP:如果我是你,我会简单地将我的游戏开发为只允许 MDPI、HDPI 和 XDPI 范围内的设备(大平板电脑)......并丢弃小型设备......这肯定会让你从头痛中解脱出来。老实说,像索尼爱立信 Xperia 10 mini 这样的小型设备不会拥有与 Game boy DS 相同的处理能力...... 这就是我现在所做的。但是一旦制造商使用 4:3 纵横比创建 mdpi 或 hdpi 设备,我将从这些用户那里获得 1* 评级。目前它适用于所有手机,但它并不是我认为的高质量,如果它可以打破任何一天。我认为创建这些组(ldpi、mdpi...)至少对于游戏来说是愚蠢的。 我认为对于文本大小必须使用 sp 而不是 dp?【参考方案4】:

没有详尽的纵横比列表。制造商可以决定他们喜欢的任何分辨率。最重要的是,纵横比与像素密度不匹配,因此使用 ldpi/mdpi/hdpi 来决定纵横比可能不是一个好主意。

你处理这个问题的策略真的取决于你的游戏。当然,在某种程度上,您应该简单地将所有内容缩放更大/更小,但显然棘手的部分是在不同纵横比上不同的边缘。某些游戏(第一人称射击游戏、横向卷轴游戏、平铺自上而下的游戏等)只要您不担心为某些设备带来优势,您就可以提供不同的视野而不会出现太大问题,因为其他您可能会考虑使用可拉伸或可平铺图形作为背景,并保持相同的有效(缩放)游戏区域。

【讨论】:

“最重要的是,纵横比与像素密度不匹配,因此使用 ldpi/mdpi/hdpi 来决定纵横比可能不是一个好主意” - 你的意思是什么那个? 我的方法也是基于从列表中获取分辨率并确定它们的纵横比,这导致“假设”只有 ldpi 使用 4:3。目前这工作正常,但一旦有人发布 4:3 mdpi,我就会被搞砸,甚至无法在市场上“预先”表明它不兼容。扩展是不可能的,因为我不想为了少数人的体验而搞砸许多人的体验,目前我的方法涵盖了大约 99% 的手机。 和你说的差不多。将密度与比率匹配是一个仅松散拟合的假设。例如,我相信 Nexus One 和摩托罗拉 Droid 都是 hdpi,但 Nexus 是 800x480,而 Droid 是 854x480。显然不一样的纵横比。 800x480 是 15:9,而 854x480 是 16:9。但是,只要您知道最小/最大比率是多少,这并不是什么大问题。如果您支持从 3:2 到 16:9 的所有比例,则 15:9 会自动被覆盖,因为它只是介于两者之间,并且仅在宽度上有所不同,但在高度上没有区别。【参考方案5】:

您可以尝试在GameDev.stackexchange.com提问

这里有一个与你类似的问题:building a game for different resoulution phones

【讨论】:

【参考方案6】:

我不能直接回答你的问题,但我想告诉你我的方法。 我尽量不使用任何数字。相反,我尝试使用填充、边距和相对布局,以便我的视图在任何手机上都能正确显示。它还可以帮助我避免为不同的方向创建视图。

【讨论】:

+1 - 这是要走的路。例如,游戏 HUD 和屏幕控件可以相对于屏幕边缘放置。 这种方法有一个问题。如果你想最大化可用的屏幕空间怎么办?假设您有一个固定大小的 2D 游戏场,它不会根据手机滚动、缩放或增加/减少关卡大小……例如俄罗斯方块或吃豆人。你如何确定你的最小值/最大值? 我根本无法确定它们。我将高度和宽度设置为 fill_parent,仅此而已。 这是一种方法。但实际上你有很多选择来处理多种屏幕尺寸。我写了一篇文章可以帮助你解决这个问题:alexis.pautrot.com/dealing-with-different-screen-sizes

以上是关于多种屏幕分辨率/纵横比(游戏)的主要内容,如果未能解决你的问题,请参考以下文章

保持网格内div的纵横比[重复]

如何使用 CSS 拉伸图像以适应屏幕并保持纵横比?

如何检查网站用户显示的纵横比? [复制]

FFmpeg - 使用纵横比更改视频的分辨率

为啥传感器尺寸的纵横比和图像分辨率的纵横比不同?

UI 元素无法正确缩放