如何使得 delta time 在 love2d 中起作用

不管我如何尝试,Delta时间无法工作。我得到以下错误信息:

player.lua 39: attempt to perform arithmetic on global 'dt' (a nil value)

in function 'update'

in function 'player_move'

[C] in function: 'xpcall'


我已经做了所有的数学计算,但它显然认为我正在谈论一个不存在的变量。我应该做 dt = 1 吗?

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

点赞
用户1442917
用户1442917

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

local function player_move(dt)
  -- 使用dt做一些操作
end

function love.update(dt)
  player_move(dt)
end
2014-07-22 18:56:25
用户5073886
用户5073886

主程序.lua:40 尝试在全局变量 'shoottimer'(空值)上执行算术运算

在代码中看起来像这样:

射击冷却时间 = 0.2
shoottimer = 射击冷却时间

--一些代码
函数爱.update(dt)
shoottimer = shoottimer - (1 * dt)

我不知道出了什么问题!

2015-07-02 12:56:53
用户5199476
用户5199476

你无需初始化 dt 变量,它已经为你完成了。如果你正在尝试在 love.update 函数中获取 Delta Time,你可以直接访问 dt 变量,不会遇到任何问题,但是这个变量并不是全局的,所以如果你尝试在另一个地方访问它(例如 love.draw 函数或 player.lua),你还有三个其他选项:

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

这个函数可能是获取 Delta Time 的最佳方式。以下是一个示例用法:

whatever*love.timer.getDelta()

非常简单!

创建全局 Delta Time 变量

这不是最好的方法,但这是一个选项。以下是一种方法和一些示例用法:

love.update 中:

function love.update(dt)
  DeltaTime = dt
end

一些示例用法:

whatever = whatever*DeltaTime

将本地 dt 变量传递给函数

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

love.update 中:

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

一些示例用法:

function player_move(dt)
  whatever = whatever*dt
end
2015-08-14 17:57:50