在我的2D游戏中,我有一个大地图,我会像在帝国时代中一样滚动它。
绘制时,我会绘制所有元素(即纹理/图像)。其中一些在屏幕上,但大多数不在(因为你只能看到地图的约10%)。
XNA是否通过检查目标矩形是否落在屏幕上,从而知道不要绘制它们?
还是应该手动检查并避免将它们绘制出来?
绘制时,我会绘制所有元素(即纹理/图像)。其中一些在屏幕上,但大多数不在(因为你只能看到地图的约10%)。
XNA是否通过检查目标矩形是否落在屏幕上,从而知道不要绘制它们?
还是应该手动检查并避免将它们绘制出来?
SpriteBatch
时被忽视的CPU性能概念是如何批处理精灵。而使用可绘制游戏组件并不容易有效地批处理精灵。spriteBatch.Draw()
时不会发生。它发生在调用spriteBatch.End()
时。因此,提高效率的低 hanging fruit 是尽量少调用spriteBatch.End()
。(当然,这意味着也要尽量少调用Begin()
)。此外,请非常节约地使用spriteSortMode.Immediate
,因为它会立即导致CPU向GPU发送每个精灵的信息(很慢)。Begin()
和End()
,并且有许多组件,则会浪费很多不必要的时间,并且您可能会节省更多的时间来设计更好的批处理方案,而不是担心屏幕外的精灵。在游戏增长过程中,你必须手动考虑这一点,这将大大影响游戏的性能,这被称为剔除。剔除不仅仅是因为将屏幕外的东西绘制出来会降低性能,而是因为调用Draw
太多次而变慢。任何在视口之外不需要更新的内容也应被排除在外。您可以在这里了解有关如何执行此操作以及SpriteBatch
如何处理此操作的更多信息。
Draw()
调用。 - Cyral