Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么一个SpriteBatch.Draw会导致帧速率下降23 fps?_C#_Performance_Windows Phone 7_Xna_Textures - Fatal编程技术网

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

C# 为什么一个SpriteBatch.Draw会导致帧速率下降23 fps?,c#,performance,windows-phone-7,xna,textures,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,

我正在为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.End(),所有需要的精灵都放在里面。

游戏中加载了256个纹理2d,它们都是在游戏开始时加载的。
游戏是一个侧滚游戏,因此背景需要一直向左移动,但即使我将其设置为Vector2.Zero,它仍会以-20fps的速度破坏fps。我希望任何人都能找到解决方案,或者至少了解发生这种情况的原因。

如果在同一个SpriteBatch Begiin/End调用中使用了256个单独的Texture2D,那么性能不是最佳的也就不足为奇了,除非您按纹理对Sprite进行排序,而这很可能不适用于platformer。同一批中的所有纹理切换都会导致帧速率降低-很可能背景图像只是一根稻草,它会在特定游戏设置中打断骆驼


您是否尝试过将这256个单独的图像组合成数量较少的纹理2D(即使用精灵表或纹理图谱)

默认情况下,XNA可能会启用VSyncing。如果是,windows phone是否以每秒60帧的速度刷新?如果您的绘制例程以59 fps的速度运行,它将强制它以下一个可用的刷新速率运行-30 fps您是使用绘制方法还是加载内容方法加载纹理?移动到LoadContent.@GeorgeDuckett无论VSync是开还是关,帧速率都差不多。@Ricoster正如我前面所写的,所有的纹理都在游戏开始时加载到游戏中(LoadContent)。如果VSync是开的,渲染方法可以等待刷新,刷新速度为60fps。如果下次刷新刚刚发生,则渲染方法必须等待,这可能会导致观察到的fps精确减半。(我提到的时候你大约60岁,现在大约30岁)。好吧,我有一个想法,可能就是这个问题。我只是不想尝试一下,如果我只是在浪费时间的话;)但是谢谢你的回答,我一有时间就试试!此外,确保纹理图集的尺寸(以及所有其他纹理)为2的幂(例如1024x2048、512x4096)。否则,手机将不得不将你所有的纹理填充到最接近的功率,这可能会很昂贵,而且会浪费大量内存和大量的小纹理。这似乎不可能是他的问题的根源。只需一个
Draw
调用即可大幅降低帧速率。