【问题标题】:How to get delta time to work on love2d如何获得在love2d上工作的增量时间
【发布时间】:2017-06-26 19:43:25
【问题描述】:

无论我尝试什么,Delta 时间都不起作用。我收到此错误

player.lua 39:尝试对全局 'dt'(一个 nil 值)执行算术运算

在函数“更新”中

在函数'player_move'中

[C] 在函数中:'xpcall'


我做对了所有的数学运算,它显然认为我在谈论一个不存在的变量。我应该这样做dt = 1 吗?

如果我这样做,它看起来仍然偶尔会以不同的速度移动,而且我见过的任何教程或文档都没有告诉你这样做。

【问题讨论】:

    标签: lua love2d


    【解决方案1】:

    您不必初始化 dt 变量,它已经为您完成了。如果您尝试在 love.update 函数中获取 Delta Time,您确实可以访问开箱即用的 dt 变量并且不会遇到任何问题,但是此变量不是全局变量,因此如果您尝试访问此变量在另一个地方(比如你的 love.draw 函数或 player.lua )你还有其他三个选择:

    使用内置的love.timer.getDelta 函数(推荐)

    此函数可能是获取增量时间的最佳方法。这是一个示例用法:

    whatever*love.timer.getDelta()
    

    很简单吧!

    制作一个全局增量时间变量

    这并不是最好的方法,但它是一种选择。这是一种方法和一些示例用法:

    love.update:

    function love.update(dt)
      DeltaTime = dt
    end
    

    一些示例用法:

    whatever = whatever*DeltaTime
    

    将 Local dt 变量传递给函数

    这不是一个坏方法,真正的问题是因为你从love.update调用你的函数所以你的函数被不断地调用(你可能不想要这个。)

    love.update:

    function love.update(dt)
      player_move(dt)
    end
    

    一些示例用法:

    function player_move(dt)
      whatever = whatever*dt
    end
    

    【讨论】:

    • dt = DeltaTime 在您的设置全局示例中是倒退的。 DeltaTime = dt 是正确的,因为您将 dt 分配给 DeltaTime
    【解决方案2】:

    确保将love.update 函数定义为love.update(dt)(参见love wiki 上的示例);如果您从love.update 调用您的player_move 函数,那么您需要将dt 作为参数添加到player_move 并将值传递给它:

    local function player_move(dt)
      -- do something with dt
    end
    
    function love.update(dt)
      player_move(dt)
    end
    

    【讨论】:

      【解决方案3】:

      Main.lua:40 尝试对全局 'shoottimer' 执行算术运算(一个 nil 值)

      在代码中是这样的:

      ShootCoolDown = 0.2
      Shoottimer = ShootCoolDown 
      
      --some code
      Function love.update(dt)
      Shoottimer = Shoottimer - (1 * dt)
      

      不知道怎么回事!

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-25
        • 2020-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多