Я пытаюсь заставить мою игру использовать дельта-время, чтобы оно стало независимым от 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);
}
}
}
if (keyboardState.IsKeyUp(Keys.A) && keyboardState.IsKeyUp(Keys.D))
{
if (change > 0)
{
if ((change -= (2 * delta)) < 0)
{
change = 0;
}
else
{
change -= (2 * delta);
}
}
else if (change < 0)
{
if ((change += (2 * delta)) > 0)
{
change = 0;
}
else
{
change += (2 * delta);
}
}
}
velocity.X = (float)change;
position += velocity;
}
public override void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(Game.Bob, position, Color.White);
spriteBatch.DrawString(Game.Debug, "A and D up: " + (keyboardState.IsKeyUp(Keys.A) && keyboardState.IsKeyUp(Keys.D)), new Vector2(10, 10), Color.Black);
spriteBatch.DrawString(Game.Debug, "A down: " + (keyboardState.IsKeyDown(Keys.A)), new Vector2(10, 30), Color.Black);
spriteBatch.DrawString(Game.Debug, "D down: " + (keyboardState.IsKeyDown(Keys.D)), new Vector2(10, 50), Color.Black);
spriteBatch.DrawString(Game.Debug, "Velocity modifier: " + velocity, new Vector2(10, 70), Color.Black);
spriteBatch.DrawString(Game.Debug, "Current velocity: " + velocity.X, new Vector2(10, 90), Color.Black);
}
}
}
Что я сделал не так?
PS: Я уверен, что не только мои глаза играют со мной.Я вижу, что игрок на 144 к / с движется быстрее, чем на 60 к / с.