为什么一个SpriteBatch.Draw会导致帧速率下降23 fps?

时间:2011-11-24 14:35:25

标签: c# performance windows-phone-7 xna textures

我正在为 C#XNA 4.0中的Windows Phone 7 开发的游戏遇到严重的性能问题。

有很多代码正在进行,比如碰撞,输入,动画,物理等等 帧速率已设置为 60fps ,但仅在 32fps 下运行。
我尝试过很多功能,例如禁用碰撞检测等功能但没有什么能帮助我获得更高的帧速率。

现在我随机发现了禁用背景的绘制,这只是一个标准的 480x800 尺寸的图像(与Windows Phone分辨率相同),并使用默认方法“spriteBatch.Draw(Textures.background,Vector2.Zero,Color.White)”帧速率从 32到55 fps 。我也尝试将纹理更改为纯白色,但这也无济于事,我也尝试将背景的绘制移动到代码中的另一个位置,但也没有任何改变。

我尝试制作一个新项目,只是绘制背景,但fps将是60 fps然后应该如此。

我只有一个SpriteBatch.Begin()和SpriteBatch。结束(),其中所有需要的精灵都被绘制在内部。

在游戏中加载了256个Texture2Ds,这些都是在游戏开始时加载的。
游戏是一个侧面滚动,所以背景需要一直向左移动,但即使我只是将它设置为Vector2.Zero,它仍然会以-ff为单位破坏fps。

我希望有人有解决方案这,或者至少知道为什么会这样。

1 个答案:

答案 0 :(得分:3)

如果你在相同的SpriteBatch Begiin / End调用中使用256个单独的Texture2D,那么性能不是最佳的并不奇怪,除非你通过纹理订购精灵,你很可能不是平台游戏。在同一批次中进行的所有纹理切换都会导致帧速率降低 - 背景图像很可能只是为您的特定游戏设置打破骆驼的吸管。

您是否尝试将这256个单独的图像组合成较少数量的Texture2D(即使用spritesheets或纹理图集)? Here is an older link about how proper sprite sorting can affect performance