首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Typesript中创建FixedUpdate

问在Typesript中创建FixedUpdate
EN

Stack Overflow用户
提问于 2020-01-22 21:01:08
回答 1查看 112关注 0票数 0

我正在用typescript开发一个游戏引擎来学习一些东西。在Unity中,固定更新的工作方式(理论上)如下:

代码语言:javascript
复制
 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中实现这样的东西的好方法是什么?我执行update函数的方式如下:

代码语言:javascript
复制
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();
    });
  }

这样,每个fixedupdate可以有多个更新,但我每次更新只能得到一个fixedupdate。

提前谢谢你,Steenbrink

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-22 21:23:54

好吧,不要紧,我很愚蠢。我会在这里留下这个作为参考。

我修复它的方法如下:

代码语言:javascript
复制
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();
    });
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59860372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档