【问题标题】:Libgdx - rendering many small sprites VS a few big onesLibgdx - 渲染许多小精灵与一些大精灵
【发布时间】:2015-08-17 00:18:46
【问题描述】:

我正在为我的游戏制作一种效果,其中有几 (200) 颗星星从屏幕边缘射出,在逐渐消失的同时向中间移动。

我想自己渲染每颗星星(因为它是自己的对象),这样星星可以有随机的速度、淡入淡出时间、大小和位置。但是我担心它可能会对旧手机的性能产生很大影响,更改 alpha 并每帧渲染 200 个精灵最多 20 秒(我会在它们淡出时重新创建它们)。

作为替代方案,我可以使用更大的星星块作为同一个精灵(一个图像),这意味着我将不得不牺牲随机效果,星星会同时淡出,这看起来不太好.

我没有办法在旧手机上进行测试,所以我会在这里问,是否在每帧循环 200 个精灵太多(我在每帧和位置更改 alpha 的小图像)?有没有不强迫我放弃每颗星的随机行为的替代方法?还是我只需要硬着头皮渲染更大的图像(可能是 3-4 个不同的图像,每个图像中有几颗星)?

【问题讨论】:

  • 五年前的中端设备对此没有问题,所以现代低端设备应该没问题。

标签: android ios performance libgdx rendering


【解决方案1】:

您可以尝试使用Flyweight pattern,可以在here 找到很好的解释和教程。基本上你要做的是有一个你的精灵的默认模型(在本例中是你的星星),然后在不同的位置绘制它。

您不必牺牲您提到的随机效果,只需使其适应您的模型,以便每个对象可以同时具有淡出效果。在附加的示例中,它们改变了网格的位置,但我想您可以扩展它以允许改变其他参数。

另外,请查看 libgdx wiki 的 this part,他们在其中讨论了性能调整。

另一种选择是检查您的应用性能(cpu、gpu、内存的使用,大多数 IDE 都有工具来衡量这一点),然后与旧手机的性能统计数据进行比较。

但是,如果您想包含旧手机,我想您最终将不得不在这些型号中测试此应用。

【讨论】:

  • 谢谢,会研究这个例子:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多