当我在PC上运行我的游戏(使用c#/ XNA 4.0开发)时,我遇到了随机帧率 增加 。这些增加导致游戏过程中的口吃效果它通常发生在游戏启动时,并且频繁到足以令人讨厌。
例如 - 我的FPS计数器将从62跳到85(导致轻微的口吃)然后回到62并持续在62/63 FPS之间保持3分钟然后跳到78然后再次回到62/63。 FPS很少实际降到60以下。
有关正在发生的事情的任何想法?
编辑 - 在下面添加了我的FPS代码(02.06.2013)
namespace Game
{
class FPSDebuggerFont : Font
{
//int totalScore;
//FramesPerSecond (FPS) debug variables
int totalFrames = 0;
int fps = 0;
int elpaseMilliseconds = 1000;
string fpsText;
public FPSDebuggerFont(SpriteFont scoreFont, String text, Vector2 pos, Color color, float scale, float layerDepth)
: base(scoreFont, text, pos, color, scale, layerDepth)
{
}
public void FPSTime(GameTime gameTime)
{
//Algorithm for FPS debugging
elpaseMilliseconds -= (float)gameTime.ElapsedGameTime.Milliseconds;
if (elpaseMilliseconds < 0)
{
//FPS debugg info
fps = totalFrames;
elpaseMilliseconds = 1000;
totalFrames = 0;
}
}
public override void Update(GameTime gameTime)
{
FPSTime(gameTime);
}
public override void Draw(GameTime gameTime, SpriteBatch sB)
{
totalFrames++;
fpsText = "Frames Per Second: " + fps;
sB.DrawString(scoreFont, fpsText, pos, color, 0, Vector2.Zero, scale, SpriteEffects.None, layerDepth);
}
}
}
为了澄清起见,我不确定如何在不添加整个项目的情况下再添加相关代码。但我当然可以添加更多信息;和我的Game类一起,我有两个使用XNA的GameComponent功能的其他类(SpriteManager,FontManager),每个类都包含自己的Load Content,Update和Draw方法,例如下面的例子;
public class SpriteManager : Microsoft.Xna.Framework.DrawableGameComponent
{
//Manager code
}
public class FontManager : Microsoft.Xna.Framework.DrawableGameComponent
{
//Manager code
}
希望这些附加信息有所帮助。
结束编辑
答案 0 :(得分:1)
可能是没有看到代码的任何事情。只要您在移动计算中使用gameTime.ElapsedGameTime
,它就不会导致任何卡顿问题。
例如:
sprite.Location += sprite.Velocity * (float)gameTime.ElapsedGameTime.TotalSeconds;