Я обнаружил, что мои объекты движутся намного медленнее, когда я чаще обновляю игровой цикл (метод Update). Например, я пытался обновить игровой цикл 60 раз в секунду до выполнения метода Draw и пытался обновить игровой цикл 240 раз в секунду до выполнения метода Draw. Объекты движутся намного медленнее, когда я обновляю игровой цикл 240 раз в секунду, но я не понимаю, почему они движутся медленнее, когда я обновляю игровой цикл чаще.
Почему мои объекты движутся медленнее, когда я обновляю игровой цикл чаще? Можно ли избежать этой проблемы, если я буду чаще обновлять игровой цикл?
public float delta;
public float SpeedYMultiplikator = 10000f;
public float SpeedYnew;
public xna.Vector2 ObjectAPosition;
public int ObjBSpeed = 400;
public int ObjectBPosY;
public Rectangle ObjectBRectangle;
public Game1()
{
graphics = new xna.GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
TargetElapsedTime = TimeSpan.FromSeconds(1.0 / 240.0f);
IsFixedTimeStep = true;
graphics.SynchronizeWithVerticalRetrace = false;
graphics.ApplyChanges();
}
protected override void Update(xna.GameTime gameTime)
{
delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
SpeedYnew = SpeedYMultiplikator * delta;
ObjectAPosition = new xna.Vector2(ObjectAPosition.X, ObjectAPosition.Y - SpeedYnew);
ObjectBPosY += (int)(ObjBSpeed * delta);
ObjectBRectangle = new Rectangle(100, ObjectBPosY, 30, 10);
base.Update(gameTime);
}
protected override void Draw(xna.GameTime gameTime)
{
// Drawing the objects here
base.Draw(gameTime);
}
дельта имеет следующие значения:
при 240 кадрах в секунду:
delta = 0,0041666
при 60 кадрах в секунду:
delta = 0,0166666
Все будет двигаться с одинаковая скорость как при 60 кадрах в секунду, так и при 240 кадрах в секунду, когда я умножаю дельту на 4 при использовании 240 кадров в секунду?
Например:
protected override void Update(xna.GameTime gameTime)
{
delta = (float)gameTime.ElapsedGameTime.TotalSeconds;
SpeedYnew = SpeedYMultiplikator * delta * 4;
ObjectAPosition = new xna.Vector2(ObjectAPosition.X, ObjectAPosition.Y - SpeedYnew);
ObjectBPosY += (int)(ObjBSpeed * delta * 4);
ObjectBRectangle = new Rectangle(100, ObjectBPosY, 30, 10);
base.Update(gameTime);
}