0

当我在 PC 上运行我的游戏(使用 c#/XNA 4.0 开发)时,我遇到了随机帧率增加。这些增加会在游戏过程中造成卡顿的影响。这通常发生在游戏启动时,并且频率足以令人讨厌.

例如 - 我的 FPS 计数器将从 62 跳到 85(导致轻微的卡顿)然后回到 62 并在 62/63 FPS 之间保持三分钟,然后跳到 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
}

希望这些附加信息有所帮助。

结束编辑

4

1 回答 1

1

没有看到代码,它可能是任何东西。只要您gameTime.ElapsedGameTime在运动计算中使用它,它就不会导致任何口吃问题。

例如:

sprite.Location += sprite.Velocity * (float)gameTime.ElapsedGameTime.TotalSeconds;
于 2013-02-05T17:04:47.123 回答