Создание FixedUpdate в Typescript - PullRequest
0 голосов
/ 22 января 2020

Я работаю над игровым движком для машинописи, чтобы выучить кое-что. В Unity исправление исправлений (в теории) работает следующим образом:

 var physicsTimeSimulated = 0;
 var lastUpdateTime = 0;    

 while (Unity is Running)
 {
     while (physicsTimeSimulated < Time.time)
     {
         Engine.ExecutePhysicsStep();
         Engine.FixedUpdate(); // <-- sent to all objects
         physicsTimeSimulated += physicsTimeStep;
     }

     deltaTime = Time.time - lastUpdateTime;
     Engine.RenderFrame();
     Engine.Update(); // <-- sent to all objects
     lastUpdateTime = CurrentTime;

     // and repeat...
 }

Что было бы хорошим способом реализовать нечто подобное в Typescript? Я выполняю функцию обновления следующим образом:

private fixedUpdateTiming: number = 1;
private lastUpdate:number = Date.now();

public Update(): void {
    while((Date.now() - this.lastUpdate) > this.fixedUpdateTiming){
      this.onAppFixedUpdate.dispatch();
      this.lastUpdate = Date.now();
    }

    this.onAppUpdate.dispatch();

    window.requestAnimationFrame(() => {
      this.Update();
    });
  }

Таким образом, может быть много обновлений за фиксированное обновление, но я могу получить только одно фиксированное обновление за обновление.

Спасибо за заранее, Steenbrink

1 Ответ

0 голосов
/ 22 января 2020

Ладно, не бери в голову, я тупой. Я оставлю это здесь для справки.

Способ, которым я это исправил, выглядит следующим образом:

private fixedUpdateTiming: number = 20;
private physicsTimeSimulated:number = Date.now();
private _deltaTime: number = 0;
private lastUpdate: number = Date.now();

public Update(): void {

    while(this.physicsTimeSimulated < Date.now()){

      this.onAppFixedUpdate.dispatch();
      this.physicsTimeSimulated += this.fixedUpdateTiming;
    }

    this.onAppUpdate.dispatch();

    this._deltaTime = Date.now() - this.lastUpdate;
    this.lastUpdate = Date.now();

    window.requestAnimationFrame(() => {
      this.Update();
    });
  }
...