libGDX Pixmap和Texture性能

use*_*850 1 performance textures render pixmap libgdx

我的游戏中有大量的2D图像,有多层.我用spritebatch()orthographicCamera().我有一些关于表演的基本问题:

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

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

Jyr*_*117 5

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

  2. 不确定这是什么意思,Pixmap应该只用于需要动态更改或作为缓存形式生成的纹理.如果可能的话,应该使用着色器完成任何动态(每秒多次更改为每帧一次).

  3. 尽可能使用精灵批量,因为它减少了绘制调用的数量.通常,只有在绝对需要时才使用Pixmaps,或者您希望将多个图层缓存在一起.缓存意味着它不会超级频繁地改变(即应该每隔几秒改变一次).由于Pixmap依赖于使用CPU,因此如果经常更换大部分内容,则速度非常慢.您还需要在进行更改后更新纹理.

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

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

一般建议:

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