为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
MYYA 2021-08-07 15:52:30
我试图让我的游戏使用增量时间,以便它独立于 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);                }            }        }我做错了什么?
查看完整描述

1 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

这里的问题不是增量时间本身。

当您计算速度变化时,您完美地应用了增量时间。

当您实际将速度应用于播放器本身时,问题就出现了。假设您处于最大速度 (5)。由于在将速度应用到位置时没有考虑增量时间,因此在 144fps 下应用速度方式比在 60fps 下应用的频率更高。这就是角色似乎走得更快的原因。

您可能想要执行以下操作:

position += velocity * delta;

那应该可以解决您的问题。


查看完整回答
反对 回复 2021-08-07
  • 1 回答
  • 0 关注
  • 186 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信