0

我正在开发一个基于瓷砖的 2d 游戏。我将事物拆分为诸如天空背景、陆地背景、城镇、UI 等组件,每个组件都处理其绘图。在调用任何绘图调用之前,我spritebatch.Begin()使用默认值,以便我在 1 批次中绘制所有内容。

为了绘制土地质量,我在该区域反复绘制方形土地纹理,直到将其填满。然而,有一种spriteBatch叫做的模式就是linear wrap这样做的。不利的一面是,我将不得不通过将我的一个全局spritebatch.begin()多次拆分为每个组件来更改我的设计。

所以我的问题是什么更好/更经济,手动平铺纹理或拆分子组件之间的begin()end()

还有其他问题可能需要我拆分一个spriteBatch.Begin(),那么额外的 1 个有多重要spriteBatch.Begin()?还是10多个?还是100多个?我想知道我应该以什么规模开始担心添加更多begins().

4

1 回答 1

1

最好的解决方案是在 GPU 而不是 CPU 上进行尽可能多的工作(例如,通过利用平铺等)并尽可能少地调用 SpriteBatch.Begin() 从而...

听起来这里的最佳解决方案不是走极端。

为什么不只拥有两个 SpriteBatches 并用于您的土地而另一个用于其他一切?

例如,重新设计您的解决方案,以便:

  • 两个 SpriteBatches 都被传递到每个组件中,让组件决定使用哪一个?...或者...

  • 每个组件都有一个属性来指示它需要哪个 SpriteBatch 并在绘制时传入适当的 SpriteBatch?

至于每个 SpriteBatch.Begin() 的影响,它实际上取决于您的特定游戏(以及完成前一个 spriteBatch 并开始下一个 spriteBatch 所需的工作量),因此我建议持续测试和监控性能是确定何时应该关心的最佳方式。

于 2011-09-25T23:27:01.253 回答