Почему мои объекты движутся медленнее, когда я чаще обновляю игровой цикл?C#

Место общения программистов C#
Anonymous
Почему мои объекты движутся медленнее, когда я чаще обновляю игровой цикл?

Сообщение Anonymous »

Я обнаружил, что мои объекты движутся намного медленнее, когда я чаще обновляю игровой цикл (метод 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);
}

Вернуться в «C#»