【LWJGL官方教程】Timing 计时

本文介绍了使用LWJGL获取系统时间、计算时间增量以及衡量FPS和UPS的方法。通过glfwGetTime()或System.nanoTime()获取时间,并在游戏循环中计算时间差以实现性能监测。此外,文章还展示了如何统计每秒更新次数(UPS)和帧率(FPS)。
摘要由CSDN通过智能技术生成

原文:https://github.com/SilverTiger/lwjgl3-tutorial/wiki/Timing
译注:翻译仅供参考,请以原文为准。代码请看原文中的链接。括号里的内容一般也是译注,供理解参考用。

此篇乃上一篇《游戏循环》的附篇,供理解上一篇的范例代码用。

Getting the system time 获取系统时间

主要原理就是取程度的系统时间。需要一个计时器(timer),精度至少得是毫秒,甚至是纳秒。
既然LWJGL3有GLFW接口,我们可以用glfwGetTime()取到自glfwInit()以来的时间秒数。

public double getTime() {
    return glfwGetTime();
}

如果你不想用这个,也可以用JAVA的System.nanoTime()然后除以1000000000得到秒数。

public double getTime() {
    return System.nanoTime() / 1000000000.0;
}

Calculating delta time 计算时间增量

为了计算时间增量,需要存下上次循环的系统时间,这个值还得在开始游戏循环的时候初始化。

double lastLoopTime;

public void init() {
    lastLoopTime = getTime();
}

计算时间增量很简单。

public float getDelta() {
    double time = getTime();
    float delta = (float) (time - lastLoopTime);
    lastLoopTime = time;
    timeCount += delta;
    return delta;
}

可以看到还有一个计数器变量(timeCount),这是用来计算FPS和UPS的。(FPS:每秒渲染画面次数,UPS每秒更新次数)

FPS and UPS calculation FPS和UPS的计算

有许多方法可以算FPS和UPS,本教程我们需要5个变量来算。

float timeCount;
int fps;
int fpsCount;
int ups;
int upsCount;

现在只要游戏循环调用update(),就要增加upsCount,而在render()后,也要增加fpsCount。

public void updateFPS() {
    fpsCount++;
}

public void updateUPS() {
    upsCount++;
}

为了刷新FPS和UPS值,我们需要在每次循环后更新计时器。如果整一秒的时间经过,我们就更新它们的值。

public void update() {
    if (timeCount > 1f) {
        fps = fpsCount;
        fpsCount = 0;

        ups = upsCount;
        upsCount = 0;

        timeCount -= 1f;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值