应该跨帧保留顶点

时间:2013-07-10 17:38:05

标签: xna monogame

我已经阅读了一篇文章,指导您编写自己的SpriteBatch,并且我注意到所有顶点和索引都被销毁并在每个帧中重新创建。这不是浪费吗?如果所有数据都永久存储在SpriteBatch中并且添加了操作它们的方法,那不是更好吗?有人可以告诉我这样做的缺点吗?

感谢您的任何意见

1 个答案:

答案 0 :(得分:2)

如果你的游戏总是在每一帧上都有相同的三角形(或类似物),并且只需要调整坐标,那么定制你自己的SpriteBatch来识别它可能是值得的。如果你有时显示/隐藏东西,它可能会变得混乱和复杂。找出可能的好处的唯一方法是分析您的代码并找出有意义的瓶颈所在。

由于SpriteBatch处理结构和预先分配的列表和数组,因此不应该浪费任何内存分配,所以它只是成为一个问题,你是否可以避免重新分配所有这些值,并且(如果这适用)对你来说,避免执行z顺序排序。

我自己使用自定义的SpriteBatch,并且基于分析,我可以看到z顺序排序步骤是我的SpriteBatch绘图调用堆栈中的主要瓶颈。但是,在我最狡猾的目标平台上,我的帧速率已经足够了。所以至少在这一点上,我没有理由尝试进一步优化。此外,我的应用程序更需要优化我的物理,并通过正交更新特性隔离我的drawables,以避免不必要的更新工作。

您的结果可能会有所不同。祝你好运!