多屏幕分辨率/宽高比(游戏)

时间:2011-08-15 02:44:42

标签: android screen-resolution aspect-ratio

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

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

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

现在我的第一个问题是这个清单是否完整,或者换句话说制造商是否允许使用其他的解决方案或纵横比。 我目前的方法是在宽高比方面查看这个列表,看起来像那样(不确定它是否确切但你明白了):

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

4:3 3:2 16:9

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

我首选的解决方案是在Android Market上指出我的应用程序可以处理哪些宽高比但到目前为止似乎不可能。

有没有人有更好的方法? (请记住,这只适用于手机上的游戏)

6 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:4)

正如之前提到的许多人一样,我的方法也是充分利用与设备无关的组件,例如paddins,margin和relativelayouts,以及Device independentt puxels。

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

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

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

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

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

或许解释得有些神秘,但克服各种设备分辨率的主要原因是要经常使用:

  • relativelayouts
  • 设备无关的像素

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

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

someTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);

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

希望这个答案有所帮助

答案 2 :(得分:4)

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

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

  

当您为不同的屏幕尺寸设计UI时,您会发现它   每种设计都需要最小的空间。所以,每个都是概括的   上面的屏幕尺寸具有定义的相关最小分辨率   由系统。这些最小尺寸为“dp”单位 - 相同的单位   您应该在定义布局时使用 - 这允许系统使用   避免担心屏幕密度的变化。

     
      
  • xlarge屏幕至少为960dp x 720dp
  •   
  • 大屏幕至少为640dp x 480dp
  •   
  • 正常屏幕至少为470dp x 320dp
  •   
  • 小屏幕至少为426dp x 320dp
  •   
     

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

Source

答案 3 :(得分:3)

没有详尽的宽高比列表。制造商可以决定他们的感觉。最重要的是,宽高比与像素密度不匹配,因此使用ldpi / mdpi / hdpi决定宽高比可能不是一个好主意。

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

答案 4 :(得分:2)

您可以尝试在GameDev.stackexchange.com

中询问

以下是与您类似的问题:building a game for different resoulution phones

答案 5 :(得分:0)

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

我没有完全深入研究它,但遗憾的是我没有看到任何长宽比的提及,所以你可能必须填写所有你知道会工作的。

如果不这样做,您可以设置图形看起来很好的最低分辨率,如果您不想以较小的比例更改游戏,可以添加黑色边框,就像在控制台游戏中一样。但是不推荐使用,移动屏幕空间非常宝贵,所以如果你用黑条切割游戏区域,我会将你的HUD移动到黑色区域,这样你仍然可以使用尽可能多的屏幕。

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

:D