用lua测量经过的时间(+love2D)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用lua测量经过的时间(+love2D)相关的知识,希望对你有一定的参考价值。

我想用os.time()函数测量我的代码执行时间,然后用LOVE框架显示出来。但是,令我惊讶的是,显示的时间在变化......我的代码在变化。

function foo()
    start_time = os.time()
        <some code>
    end_time = os.time()
    elapsed_time = os.difftime(end_time-start_time)
    love.graphics.print('start time: '   .. start_time .. 's', 12, 12)
    love.graphics.print('end time: '     .. end_time .. 's', 12, 22)
    love.graphics.print('time elapsed: ' .. elapsed_time .. 's', 12, 32)
end

当我离开窗口并打开我的图形时,时间在变化(开始和结束的时间在增加,差值在1和2之间变化)--所以第一个问题是,如果os.time()返回的是一个数字,怎么会发生这种情况?还有--这是个测量我的应用程序执行时间的好方法吗?

答案

startend 应该一直在增长,除非时间停止,在这种情况下,我们都有麻烦了。

它们之间的差距会随着时间的长短而改变 <some code> 执行所需的时间。

os.time 通常返回从过去某个任意点开始的秒数(通常是111970 00:00:00)。这并不保证(它是用C语言的 time 功能 其中不作任何保证). 但绝对应该一直在推进,否则就不是真的给你时间了吧?


另外,你用的是 difftime 错。你应该传给它两个值,它给你它们之间的区别。你只传给它一个值。你传给它的是一个值 吧,但它似乎在返回第一个值,在你的情况下,它意外地工作了,因为你碰巧在一台机器上,而在这台机器上的 difftime 实际上是t2-t1。在其他系统中,这可能会被破坏。你应该把调用改为。

elapsed_time = os.difftime(end_time,start_time)
另一答案
function foo()
    start_time = os.time()
        <some code>
    end_time = os.time()
    elapsed_time = os.difftime(end_time, start_time)
    love.graphics.print('start time: '   .. start_time .. 's', 12, 12)
    love.graphics.print('end time: '     .. end_time .. 's', 12, 22)
    love.graphics.print('time elapsed: ' .. elapsed_time .. 's', 12, 32)
end

首先,关于 os.time()

返回值是一个数字,其含义取决于你的系统。 在POSIX、Windows和其他一些系统中。这个数字计算从某个给定的开始时间("纪元")开始的秒数。. 在其他系统中,没有指定意义,时间返回的数字只能作为date和difftime的参数。

逐步迭代。

  1. start_time 将时间存储为数字。
  2. 你的代码执行起来需要一定的时间。
  3. end_time 存储现在时间的数值。它将是一个大于或等于以下的数字 start_time.
  4. 时差的计算方法是 os.difftime() 呼叫(句法错误).

的值。startend 将会在每次迭代时改变,因为你的系统从epoch开始已经向未来发展了一点。另外, elapsed_time 被报告为1或2秒,这是您的代码执行所需的时间。


您也可以使用Lua的 os.clock() 返回执行代码所需的时间(秒)。

另一答案

试试 love.timer.getTime 从0.9.0开始,它返回微秒级的精确时间。那个链接有一个如何计时的例子。

它可以用于相对时间(减法比较)。如果你想要更多的绝对时间,可以试试类似的东西。

do
    local _getTime = love.timer.getTime
    local initialTime = _getTime()

    function appTime()
        return _getTime() - initialTime
    end
end

以上是关于用lua测量经过的时间(+love2D)的主要内容,如果未能解决你的问题,请参考以下文章

Love2D(Lua)中的面向对象编程

如何在 Lua (Love2D) 的库中定义一个类?

lua (love2d): 函数应该没有结束

love2d(lua)中的碰撞检测

Lua,Love2d,不同文件夹下两个类名相同的游戏

如何让子弹出现在屏幕上(Lua、Love2D)