1

我正在尝试为具有约 10 个屏幕的 Android 游戏指定艺术尺寸。我希望游戏能够在 API 8+ 以及除“小”之外的所有尺寸屏幕上运行。

由于我们使用 API 8,我使用旧的“4 个屏幕类别”功能 - 我计划支持

  • 正常(480 x 320,最高 640 x 480)
  • 大(640 x 480,最高 960 x 720)
  • xlarge(960 x 720,最高 1920 x 1200)

1920x1200 png 文件约为 4.1MB。所以其中 10 个是 41MB,我们几乎突破了 50MB 的应用程序大小限制(Play Store)。

所以三个问题: 1.人们如何支持游戏画面的细节艺术?我是否必须使用平淡无奇的 9 个补丁 pngs 文件作为背景?或者以 960x720 尺寸存储所有艺术作品,并允许 Android 为大屏幕和普通屏幕调整其大小是否可行?这种大小的 10 个背景文件总计约 15 MB,剩下 35 MB 用于其他所有内容。

如果我使用 jpg 而不是 png 会怎样?我会损失多少质量?因为我只会缩小规模,这应该没问题,对吧?10 张 960x720 的 jpg 文件只有 4.3MB。

  1. 如果我允许 Android 调整它的大小,我如何支持宽高比与 960x720 的 4:3 不同的屏幕?有没有办法在布局 XML 中指定“使用大文件夹中的可绘制对象,但将其“信箱”到屏幕上,以便最长的尺寸刚好适合”?(对于大于 960x720 的超大屏幕,只需将可绘制对象放在屏幕中间 - 根本不要拉伸它)?

  2. 屏幕的 DPI 分辨率根本不考虑这个因素吗?仅当您希望某些东西在不同分辨率屏幕上的大小大致相同时才需要考虑 DPI,例如图标或按钮。正确的?

似乎这应该是一个已解决的问题,需要遵循一个众所周知的模式或模板。其他人是如何做到的?每个人都在安装后使用大量下载(想避免)还是使用 9 个补丁背景?

提前感谢您的任何建议。我在这里搜索了几个术语,并查看了大约 25 个过去的答案,但没有找到我要找的东西。

彼得

4

1 回答 1

1

复活死者(线程):一种做事方式可能是只提供一组位图并自己进行缩放。您可以提供大的位图并按比例缩小,或者提供中间位图并按比例放大(对于大屏幕)和缩小(对于较小的尺寸)。

前者的好处是你的艺术作品在大屏幕上看起来很棒,而且你有更多的未来证明(如果你在代码中提供了这一点)。不利的一面是,在低端设备上解码/加载这些位图时,您可能(并且实际上很可能会)遇到内存不足/超出 VM 错误,即使是在小心操作时也是如此。所以我通常选择第二种方法。

可以通过多种方式进行放大,但一种是以默认大小加载 bmp(使用 getResources().openRawResource(id) 或 BitmapFactory.decodeResource(etc) 或更好地使用 inputstreams 或 [根据一些最好的方法] 使用 FileDescriptor 方法加载/创建)然后通过使用 createScaledBitmap() 创建另一个 bmp 或者如果绘制到画布将其绘制到目标 Rectangle 来缩放它(更好的内存)。对于缩小,您可以使用像 .inScaled 这样的 BitmapOptions,或者再次在画布绘制调用中使用较小的目标 Rect。

这样做比让 Android 使用这些存储桶(hdpi 等)为您扩展并且如果做得好的话使用更少的内存更好并且(对于游戏)更快。

但要小心,因为某些位图加载方法有点错误,并会产生“bmp 对于 VM 来说太大”错误。还要学会正确处理你的 bmp;很多人和谷歌/谷歌人说 Android 会这样做,你不必将 bmps 设置为 null 并 recycle() 它们,但到目前为止我发现你这样做了。另一个警告是设置适当的选项(过滤/抗锯齿等)以防止 bmp 模糊。并注意 BitmapOptions/canvasses/Sur​​faceViews 甚至窗口上的非最佳颜色/格式/dpi 设置。

还有更多,但这应该可以帮助任何人入门。

于 2014-02-26T02:36:02.820 回答