Libgdx - 如何加载一个巨大的精灵表,使其不呈现黑色?

Posted

技术标签:

【中文标题】Libgdx - 如何加载一个巨大的精灵表,使其不呈现黑色?【英文标题】:Libgdx - how to load a huge spritesheet so it doesn't render black? 【发布时间】:2016-12-04 21:11:41 【问题描述】:

我在 LibGDX 中编写的手机游戏遇到了性能问题。 假设只有一种分辨率 - 1920x1080 - 仅用于测试。

我有一个 spritesheet 与下面这样的图像相结合:

我希望这些粒子在我的徽标周围飞舞,因此我需要它们的大小至少为 256px/512px - 这样在给定分辨率下看起来不错。

如果一帧有这样的大小,并且我需要至少 32 帧才能让它看起来不错,那么很容易计算出整个 spritesheet 有尺寸:

width: 256 * 8 (columns) = 2048
height: 512 * 4 (rows) = 2048

这是最乐观的想法,因为 spritesheet 应该更大。 spritesheet 的重量约为 50kb,所以它真的很好,但尺寸给我带来了麻烦。

昨天我在 LibGDX 的桌面版本上测试了一切,一切都很好。我在完成菜单后将游戏移植到 android 并且该 spritesheet 应该绘制的区域是 黑色

我在 gamedev 或这里读到(不记得了)我应该只使用最大尺寸为 od 1024/1024 的图形,因为 LibGdx 在许多版本的 Android 上加载更高的纹理时存在一些问题。

我想要完成什么? 我需要找到一个想法如何使它工作并加载纹理。

我已经尝试使用像素图调整文件大小,但它需要整数作为维度,它会降低质量等...

我知道有人会说,你为什么不直接创建一个带有橙色图形的单个“点”对象,如下所示,随机生成这些点并有时更改它们的 alpha?这不是一个选项,因为我需要像“雾”这样的其他动画,它不能像点一样简单地编程。

也许有办法调整纹理、区域或其他东西的大小(当然使用浮点数来保持纵横比)?

如果有人有任何想法,我应该如何在我的应用程序中使用巨大的精灵表,我将非常感激:)

【问题讨论】:

如果每个单独的纹理都是 256 x 512,你不能加载 4 个 1024 x 1024 纹理来解决这个问题吗? 正如我所说,这是最乐观的情况,你知道,1920x1080 设备上的 256x512 块看起来非常非常小。我需要缩小图形,而不是放大它们!它应该更大,这样在调整大小时它不会失去质量:(当我有一个更大的精灵表时,我需要将它切割成 20 个更小的精灵表,这没有意义:( 对于这个特定的动画,直接在游戏中制作动画而不是尝试将电影加载为纹理怎么样?或者,您可以创建一个 Android 视图,在加载游戏之前播放实际的 mpeg 电影。 很抱歉,直接在游戏中设置动画是什么意思? :D 【参考方案1】:

您的精灵表的长度不应超过 2048*2048。

如果要加载大于 2048*2048 的 spritesheet,则必须单独加载每帧。

假设,如果您的精灵表包含 15 个帧,那么您必须有 15 个单独的 png 文件。

【讨论】:

要超级清楚 - 它应该是 1024x1024 在所有设备上都是安全的! :)

以上是关于Libgdx - 如何加载一个巨大的精灵表,使其不呈现黑色?的主要内容,如果未能解决你的问题,请参考以下文章

使用资产管理器 LibGDX 加载精灵

使用资产管理器 LibGDX 加载精灵

播放(动画)巨大精灵表的最佳技术

使用 LibGdx 在 Java 中为 Sprite 表设置动画

将 spritesheet 中的精灵存储在数组 Libgdx 中

Libgdx之Sprite 精灵类