首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DeltaTime与转型问题

DeltaTime与转型问题
EN

Stack Overflow用户
提问于 2015-01-26 14:01:20
回答 1查看 81关注 0票数 0

我有一个(简单的)游戏引擎;在游戏循环中,我有一个"deltaTime“变量。(从上一帧开始的时间,以秒为单位),deltaTime变量与id完全一致。

然而,即使deltaTime很好,我也不能准确地转换实体的位置。它在FPS非常低的情况下工作得很好,但当它变得更高(15<)时,它就会崩溃,不能工作。这个物体走得非常非常慢。FPS越快,速度就越慢。我甚至试着将FPS限制在120。

我在这里找到了疑似有问题的代码区域:

代码语言:javascript
复制
curEntity.pos.y+= curEntity.velocity.y * deltaTime;

pos.y、velocity.y和deltaTime都是浮点数。

这是怎么回事?我该如何解决这个问题呢?

如果你感兴趣,下面是获取deltaTime的代码:

代码语言:javascript
复制
long now = System.nanoTime();
deltaTime= (now - lastTime) /  1000000000f;
lastTime=now;

//值得注意的是,我正在尝试做Unity做的事情;此外,我还尝试将pos.y、velocity.y和deltaTime改为替身

EN

回答 1

Stack Overflow用户

发布于 2015-01-26 14:39:36

在摆弄了一段时间后,我找到了答案:我有自上次循环通过以来的增量时间,而不是上次物理更新的增量时间()。这里(如果有人关心的话)是答案:

代码语言:javascript
复制
    while(running){
        long now = System.nanoTime();
        //HERE IS WHERE THE DELTA TIME CODE WAS LAST
        tickDelta += (now - lastTime) / nsPerTick;
        frameDelta += (now - lastTime) / nsPerFrame;
        lastTime=now;

        if(tickDelta>=1){
            //THIS IS WHERE IT SHOULD BE
            //GETS THE TIME SINCE LAST TICK
            deltaTime= (now - deltaTimeTimer) / 1000000000f; 
            deltaTimeTimer=now;
            ticks++; Tick(); tickDelta=0;
        }
        if(frameDelta>=1){frames++; Render(); frameDelta=0;}

        if(System.currentTimeMillis() - Timer >= 1){Timer+=1000; System.out.println("FPS: "+frames+"; TPS: "+ticks +"; deltaTime: "+deltaTime); ticks=0;frames=0;}

        try{Thread.sleep(5);} catch(Exception err){} //TODO: Remove
        //System.out.println(deltaTime);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28145379

复制
相关文章

相似问题

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