我试图让我的游戏使用增量时间,以便它独立于 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;
那应该可以解决您的问题。
- 1 回答
- 0 关注
- 186 浏览
添加回答
举报
0/150
提交
取消