我已经阅读了一篇文章,该文章指导您编写自己的 SpriteBatch,并且我注意到所有顶点和索引都被销毁并在每一帧中重新创建。那不是很浪费吗?如果所有数据都永久存储在 SpriteBatch 中并添加了一种操作它们的方法,那不是更好吗?有人可以告诉我这样做的缺点吗?
感谢您的任何意见
如果您的游戏实际上总是在每一帧上渲染相同的三角形(或类似的),并且只需要调整坐标,那么定制您自己的 SpriteBatch 以识别这一点可能是值得的。如果你有时显示/隐藏东西,它可能会变得混乱和复杂。找出可能的好处的唯一方法是分析您的代码并找出有意义的瓶颈在哪里。
由于 SpriteBatch 处理结构和预分配的列表和数组,因此不应该浪费任何内存分配,所以问题在于您是否可以避免重新分配所有这些值,并且(如果这适用于您)避免执行 z 顺序排序。
我自己使用定制的 SpriteBatch,基于分析,我可以看到 z 顺序排序步骤是我的 SpriteBatch 绘图调用堆栈中的主要瓶颈。但是,我的帧速率在我最懦弱的目标平台上已经足够好了。所以至少在这一点上,我没有理由在那里尝试进一步优化。此外,我的应用程序更需要优化我的物理特性,并通过正交更新特性来隔离我的可绘制对象,以避免不必要的更新工作。
您的结果可能会有所不同。祝你好运!