这就是我的表现:
绘制1-30区域通常是30 fps,但只有1个大480x320区域只有20fps!
答案 0 :(得分:4)
你是在模拟器上运行吗?仿真器不是用于实际应用程序性能的指标。在真实设备上进行测试。
话虽如此:在常见的Android设备上,你可以填充屏幕大约1.6-2倍。这个数字当然只是一个球场数,并且受到诸如启用混合的因素的影响(如果启用则更糟),过滤(接近,线性,越需要越多的处理能力),纹理的颜色深度(16位) RGB,32位RGBA,需要的带宽越多越好。
虽然不是问题的一部分,但您也应避免尽可能多地切换纹理。例如,这将是一种反模式:
batch.begin();
batch.draw(tex1, 0, 0);
batch.draw(tex2, 10, 30);
batch.draw(tex1, 40, 20);
....
batch.end();
这可以通过对相同纹理的绘图进行分组或使用纹理图集来解决。
答案 1 :(得分:2)
如果您还没有阅读过,那么您可能会发现this article有用。它描述了绘制大纹理时的性能特征。
答案 2 :(得分:1)
据我所知,在绘制许多区域时,绘图命令的一部分被发送到GPU进行渲染,而您仍在向spritebatch添加新的绘图命令。
当达到批量大小时,会出现这种情况,绑定新纹理或调用flush()
如果我理解文档是正确的,这样cpu和gpu就不必等待很长时间,并且可以提高性能。
但是,如果每帧只有一个大区域的绘图命令,则spritebatch不能将命令部分发送到gpu,因为......好吧...只有一个^^
如果你真的只想绘制一个精灵,你可以把它分成几个区域......(如你所说,你还有10fps)
但是我想一旦你必须绘制更多的精灵,除了大的精灵之外,没有必要将它分开。