为什么增量时间不起作用?(MonoGame, C#)

我试图让我的游戏使用增量时间,以便它独立于 FPS。我尝试这样做并并排比较它们:

https://youtu.be/XYC-AZbk0JE

但是 144fps 上的播放器仍然更快。我的代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;


using Microsoft.Xna.Framework;

using Microsoft.Xna.Framework.Graphics;

using Microsoft.Xna.Framework.Input;


namespace _2D_Game_Test.GameStates

{

public class TestState : GameState

{

    Vector2 velocity;

    Vector2 position;


    double change = 0;


    KeyboardState keyboardState;


    public override void Initialize()

    {

        velocity = new Vector2(0, 0);

        position = new Vector2((1280 / 2) - (Game.Bob.Width / 2), (720 / 2) - (Game.Bob.Height / 2));

    }


    public override void Update(GameTime gameTime)

    {

        if (Mouse.GetState().LeftButton == ButtonState.Pressed)

        {

            change = 0;

            velocity = new Vector2(0, 0);

            position = new Vector2((1280 / 2) - (Game.Bob.Width / 2), (720 / 2) - (Game.Bob.Height / 2));

        }


        double delta = gameTime.ElapsedGameTime.TotalSeconds;


        keyboardState = Keyboard.GetState();


        if (keyboardState.IsKeyDown(Keys.A))

        {

            if (change > 0)

            {

                change -= (10 * delta);

            }

            else if (change > -5f)

            {

                if (change - (5 * delta) < -5f)

                {

                    change = -5f;

                }

                else

                {

                    change -= (5 * delta);

                }

            }

        }

        else if (keyboardState.IsKeyDown(Keys.D))

        {

            if (change < 0)

            {

                change += (10 * delta);

            }

            else if (change < 5f)

            {

                if (change + (5 * delta) > 5f)

                {

                    change = 5f;

                }

                else

                {

                    change += (5 * delta);

                }

            }

        }


我做错了什么?


MYYA
浏览 187回答 1
1回答

茅侃侃

这里的问题不是增量时间本身。当您计算速度变化时,您完美地应用了增量时间。当您实际将速度应用于播放器本身时,问题就出现了。假设您处于最大速度 (5)。由于在将速度应用到位置时没有考虑增量时间,因此在 144fps 下应用速度方式比在 60fps 下应用的频率更高。这就是角色似乎走得更快的原因。您可能想要执行以下操作:position&nbsp;+=&nbsp;velocity&nbsp;*&nbsp;delta;那应该可以解决您的问题。
打开App,查看更多内容
随时随地看视频慕课网APP