Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >了解LWJGL中的Delta时间

我已经开始研究lwjgl了,我很难理解Delta是如何工作的。我已经浏览过与此相关的其他问题和网站,但这仍然是一个令人费解的话题。如果这里有人能帮我,那就太好了,所以请容忍我。

我知道60 for的达美时间是16,如果帧速率是30,大约是这个的两倍。我不明白这是怎么计算出来的。是帧间的时间吗?抱歉我问了个下流的问题。

代码语言:javascript
运行
AI代码解释
复制
private long getTime() {
return (Sys.getTime() * 1000) / Sys.getTimerResolution();
}


private int getDelta() {
long currentTime = getTime();
int delta = (int)(currentTime - lastTime);
lastTime = getTime();
return delta;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-03 04:03:54

正如opiop65已经说过的那样,增量时间只不过是从上一个帧的乞讨到当前帧的乞讨之间花费的时间。

它怎麽工作?

Delta时间可以是任何类型的单位:纳秒、毫秒(通常这是标准的)或秒。正如你所说的,当游戏运行在60 runs时,增量时间是16,当游戏运行在30 runs时,时间是32。至于为什么,这很简单:为了让游戏以每秒60帧的速度运行,它必须每1000/60 (= 16.666667)毫秒产生一个帧,但如果它以30帧运行,那么它必须每1000/30 (= 33.333333)毫秒产生一个帧。

但是为什么我们要使用增量时间呢?

我们使用增量时间,因为我们想要做运动和各种各样的东西,时间依赖,而不是框架依赖。让我们说,你想要你的游戏的角色之一水平移动1单位每秒。你怎么做到的?显然,您不能仅仅将1添加到字符的位置的X值中,因为在1*x等于FPS的情况下,它每秒会被移动1次(假设您将更新每个帧的字符)。这意味着如果有人在1FPS上运行游戏,他的角色将每秒移动1个单位,而如果有人在5000 FPS上运行游戏,他的角色将每秒移动5000个单位。当然,这是不可接受的。

可以说他会在每次更新时移动字符1/16.6667单位,但是如果某人有一个FPS,他每秒移动1/16.6667单位,而不是那个在5000 FPS上运行的家伙,因此每秒移动5000*(1/16.6667)单位。

是的,您可以启用V,但是如果有人有120 or监控器(甚至更高)而不是60 or呢?是的,你可以锁定框架,但你的球员不会对此感到太高兴。而且,这也不能阻止角色减速时,游戏下降到60英尺以下。那么现在呢?

达美是时候营救了!

你所要做的就是在每次更新中移动你的角色1*delta

如果游戏运行在较高的FPS上,则达美时间较低,从而使那些在较高FPS上运行游戏的角色变得更慢(因此他会移动较小的数量,但更频繁),而那些在较低的FPS上运行游戏的角色会更快(因此他会移动更多的FPS ),最终他们将在同一时间内移动相等的距离。

请注意,在与增量时间相乘时使用哪个单位确实很重要:

如果您使用millis,那么在60 you时,您的增量将是16.6667,最后是1*16.6667 = 16.6667移动的每一个帧。但是,如果您要以秒为单位度量您的增量时间,那么在60 you时,您的增量时间将是0.016667,这意味着您的角色将移动每个帧的0.016667单位。

这不是你应该担心的事情,只要记住就行了。

票数 2
EN

Stack Overflow用户

发布于 2014-03-31 05:56:10

Delta只是一个帧“处理”自身,然后在屏幕上显示另一个帧所需的时间。这基本上是帧间的时间,就像你所说的。来自谷歌:

数学。变量中的增量变化。

让我们把你的代码拆开。

代码语言:javascript
运行
AI代码解释
复制
return (Sys.getTime() * 1000) / Sys.getTimerResolution();

这一行只返回当前时间(我相信)毫秒?

代码语言:javascript
运行
AI代码解释
复制
long currentTime = getTime();
int delta = (int)(currentTime - lastTime);
lastTime = getTime();
return delta;

第一行只获取当前时间。然后,第二行通过lastTime变量(即显示最后一帧的时间)减去当前时间(即显示当前帧的时间)来计算增量。然后lastTime设置为currentTime,这是显示当前帧的时候。它真的很简单,当你想到它,这只是时间的变化之间的框架。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22752464

复制
相关文章
Qml透明窗口实现
  通过QQmlApplicationEngine加载Qml界面文件。需要添加下列代码即可:
Qt君
2020/04/02
3.9K1
1.1 Qt qml 开端
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
code先森
2021/06/01
9770
1.1 Qt qml 开端
Qml加载网络控件之小坑
rootObjects()为空,那么上一句逻辑执行load()意味着未正确执行或未加载完成。
Qt君
2023/03/17
6370
Qml加载网络控件之小坑
Vue图片加载错误、图片加载失败的处理
这个判断只能判断pic是否存在,只有pic=””的情况下,才会显示设置的默认图片,但是如果pic这个字段是有值的呢,并且是一个错误的值,或者一个找不到的404的路径呢?这个时候就要用onerror来检测图片加载错误,加载失败了
全栈程序员站长
2022/09/05
3.9K0
Qt开发-确认过眼神
Qt是一个跨平台的C++应用程序开发框架,用它可以轻易做出艺术级的图形界面;Qt 支持跨平台体现在它可以支持各大主流操作系统(Windows、Linux、Unix、嵌入式系统等)
ElectricDeveloper
2021/08/18
1.9K0
【QML】QML与C++混合编程
QML与C++混合编程 使用QQuickView pro文件中添加quick模块 #include<QApplication> #include<QQuickView> int main(int argc,char* argv[]){ QApplication app(argc,argv); //加载qml文件到视图 QQuickView view; view.setSource(QUrl("column.qml")); view.show(); re
半生瓜的blog
2023/05/13
9030
Qt Quick实践系列-创建简单例子
❝介绍如何创建一个QML简单例子。 ❞ 创建QML例子步骤 "文件"->"新键文件或项目"。 选择"Qt Quick Application"。 设置项目名字。 设置编译环境,这里设置的是Mingw编
Qt君
2020/05/08
8580
Qt Quick实践系列-创建简单例子
程序打包问题及解决方法汇总
  小白:怎么我编译好的程序在QtCreator能运行,但我在文件夹下打开却不行了呢?   Qt君:因为QtCreator运行下的程序附带了运行环境,而离开了QtCreator软件没有运行环境会报以下的一些错误(库找不到)。
Qt君
2019/09/30
2K0
程序打包问题及解决方法汇总
Qml组件小知识
介绍组件构造,销毁,动态加载小知识。 对象/组件都具有类似C++的构造函数和析构函数 onCompleted对象构造完成自动执行; onDestruction对象销毁前自动执行。 QtObject { Component.onCompleted: console.log("Completed") Component.onDestruction: console.log("Destruction") } 使用Loader加载组件 Component必须具有子空间才能实例化; onProgre
Qt君
2019/10/23
1.5K0
QML如何构建第三方包
模块是一种封装的方式,设计它的人可以单独更新模块内容,然后更新版本号,对使用模块的人没有影响。在项目中,不同窗口可以使用同一模块中的一些类型。
Jean
2018/11/14
2.1K0
QML如何构建第三方包
QtQuick系列教程之开发环境的搭建
Qt是一个跨平台应用程序和 UI 开发框架。使用 Qt 您只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
xiangzhihong
2022/11/30
2.1K0
PySide_PyQT_QML
1、新建项目 1.1、新建工程 打开PyCharm,新建工程tempMonitor,如下: image-20210825202543995.png 1.2、添加python主程序 tempMonitor.py 主程序如下: import math import os import sys import time from pathlib import Path from PySide2.QtCore import Qt, QObject, Slot from PySide2.QtQml import QQm
大发明家
2021/12/06
1.7K0
vs2015安装失败,必需的组件失败_博图显示下位组件错误
大家好,又见面了,我是你们的朋友全栈君。 VS2008安装失败,组件安装失败的解决办法 之前安装过VS2008,二次安装时,提示组件安装失败 ![在这里插入图片描述](https://img-blo
全栈程序员站长
2022/10/29
1.1K0
vs2015安装失败,必需的组件失败_博图显示下位组件错误
QML知识-与Qt数据交互
使用Qml编程时,常常会与Qt之间进行数据访问或修改,本篇文章是介绍Qt与Qml的数据交互方法,一般有两种方法。
Qt君
2019/07/16
2K0
图片懒加载组件封装,加载时loading效果,加载失败暂时默认图片
组件代码 <template> <view class="easy-loadimage" :id="uid"> <image class="origin-img" :src="imageSrc" :mode="mode" @click="ui.showImg(imageSrc)" v-if="loadImg&&!isLoadError" v-show="showImg" :class="{'no-transition':!openTransition,'sh
用户10106350
2022/10/28
1.4K0
Qml引用Loader组件属性
  本例子使用Loader加载myComponent组件,然后通过Loader的item属性设置myComponent的value属性。
Qt君
2023/03/17
8640
Qml引用Loader组件属性
QML 用QSortFilterProxyModel实现搜索功能
c++部分的代码: #include <QQmlApplicationEngine> #include <QQmlContext> #include <QtQml> ... #include "bookmodel.h" int main(int argc, char *argv[]) { ... qmlRegisterType<BookModel>("Backend", 1, 0, "BookModel");//向qml注册类型 BookModel *bookModel = new
饶文津
2020/06/02
1.6K0
Qml控件之Spin加载中
  页面等待异步数据或正在渲染过程时,合适的加载动画会有效缓解用户的焦虑,从而提升用户体验。
Qt君
2023/03/17
7110
Qml控件之Spin加载中
点击加载更多

相似问题

QQmlApplicationEngine未完全卸载qml组件

149

错误: QQmlApplicationEngine无法加载组件“网络问题”

1105

CLion - QQmlApplicationEngine中的Qt5 QML无法加载组件

1331

QQmlApplicationEngine未能加载组件

12

QQmlApplicationEngine未能在Python上加载组件

115
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档