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

时间:2013-01-23 21:07:28

标签: c# performance xna drawablegamecomponent

我正在XNA上进行2D游戏。 当使用可绘制游戏组件时,哪一个更适合性能?

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

2.当它的屏幕外不运行其绘图功能(通过使用“清醒”布尔字段和 如果声明在绘制函数中的所有内容)

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

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

1 个答案:

答案 0 :(得分:5)

使用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时间......