如何防止在屏幕外绘制XNA组件?

我在XNA做了一场2D比赛。 使用可绘制的游戏组件哪一个更好的性能?

1.当组件未在屏幕上时,将其从组件列表中删除,并在其屏幕上添加它。

2.当它的屏幕外不运行其绘制function时(通过使用“清醒”bool字段和绘制函数中的所有内容的if语句)

我现在正在使用方法2,它工作正常。 它方便的cus组件的draworder不会改变(如果我删除并重新添加它们,我将需要更多的代码来管理它)事实上它只是发生在我身上,如果它不在组件列表中它不会更新我还需要别的东西来跟踪它是否在屏幕上……

此外,我没有配置探测器的视觉工作室的花哨版本所以我只是问这里人们从他们的经验中想到了什么

使用SpriteBatch时有时会忽略CPU性能的概念,就是如何批量精灵。 并且使用可绘制的游戏组件并不容易有效地批量精灵。

基本上,绘制精灵的GPU并不慢,并且将所有精灵组织成批处理的CPU并不慢。 缓慢的部分是当CPU必须与GPU通信时需要绘制的内容(向其发送批处理信息)。 调用spriteBatch.Draw()时,不会发生 CPU到GPU的通信。 当你调用spriteBatch.End()时会发生这种情况。 因此,效率低下的结果是不太经常调用spriteBatch.End()。 (当然这意味着不太经常调用Begin())。 另外,非常谨慎地使用spriteSortMode.Imediate,因为它会立即导致CPU将每个sprite信息发送到GPU(慢))。

因此,如果你在每个游戏组件类中调用Begin()和End(),并且有很多组件,那么你就会花费很多时间来获得不必要的时间,并且你可能会节省更多的时间来提供更好的批处理方案,而不是担心屏幕外的精灵。 。

旁白:无论如何,GPU会自动忽略其像素着色器的屏幕外精灵。 所以剔除CPU上的屏幕外精灵不会节省GPU时间……