1

我的游戏中有大量的二维图像,有多个图层。我使用spritebatch()orthographicCamera()。我有一些关于表演的基本问题:

  1. 使用 Atlas 是加载图像的更快方法吗?
  2. 使用像素图(并在绘制前转换为纹理)或纹理哪个更快?
  3. 当我制作多层图像时,我应该使用Texture.draw(或Pixmap.draw用于 Pixmap)制作最终图像然后渲染它吗?或者我应该渲染spritebatch.begin()and中的所有内容spritebatch.end()
  4. 有没有办法跟踪“脏精灵”(在两帧之间改变的屏幕部分)并只渲染这个区域以提高性能?
  5. 另外,如何查看程序资源占用的内存量,如何管理?(也许这个问题有点难)

感谢您的帮助(欢迎任何其他一般性建议)

4

1 回答 1

5
  1. 是的,这减少了渲染时需要交换纹理的次数。这通常比使用单独的图像要快得多。

  2. 不知道你的意思是什么,像素图应该只用于需要动态更改或作为缓存形式生成的纹理。如果可能的话,任何动态的(每秒改变多次到每帧一次)都应该使用着色器来完成。

  3. 尽可能使用 sprite 批处理,因为它可以减少绘制调用的数量。通常,仅在绝对需要或您想要将多个图层缓存在一起时才应使用像素图。缓存意味着它不会非常频繁地更改(即应该每隔几秒钟更改一次)。由于 Pixmap 依赖于使用 CPU,因此如果经常更改大部分内容,则会非常慢。您还需要在进行更改后更新纹理。

  4. 不,这必须由您自己完成...这很少值得付出努力,通常还有其他更简单的方法,例如减少绘制调用和剔除...但是,这是非常特定于应用程序的,这是您将要做的事情需要进行试验以查看最适合您的应用程序的方法。

  5. 许多分析和监视工具存在 VisualVM for desktop。Android 4.0+ 具有非常好的开发工具来跟踪事物,Android 开发环境将提供有关 GC 发生时间、内存使用情况等的信息。当然,分析本身会降低应用程序的性能/行为。Runtime.getRuntime()还提供了一些关于正在运行的 JVM 的良好内存信息。

一般建议:

没有灵丹妙药,一切都是特定于应用程序的,虽然我已经针对一般情况提出并回答了您的问题,但并非一切都适用于所有情况。您将不得不对您的应用程序进行试验,以找出最适合您的方法。另外,不要过于担心性能和设计,目标是制作软件产品。如果您花太多时间担心性能,那么您将永远无法完成您开始的任何项目。我最好的建议是尝试一下并从经验中学习。你会犯错,我们都会犯错,但经验总是有助于减轻这种情况。

于 2014-06-14T20:24:06.180 回答