Lua 如何利用delta时间在love2d上工作

Lua 如何利用delta时间在love2d上工作,lua,love2d,Lua,Love2d,不管我怎么做,三角洲时间都不起作用。我得到这个错误 player.lua 39:尝试对全局“dt”(一个零值)执行算术运算 在函数“更新”中 在“玩家移动”功能中 [C] 函数中:“xpcall” 我把所有的数学都算对了,它显然认为我说的是一个不存在的变量。我该怎么做 如果我这样做,它仍然看起来像是偶尔以不同的速度移动,而且我所看到的任何教程或文档都没有告诉您这样做。确保您将love.update函数定义为love.update(dt)(参见上的示例);如果从love.update调用play

不管我怎么做,三角洲时间都不起作用。我得到这个错误

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

在函数“更新”中

在“玩家移动”功能中

[C] 函数中:“xpcall”


我把所有的数学都算对了,它显然认为我说的是一个不存在的变量。我该怎么做


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

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

local function player_move(dt)
  -- do something with dt
end

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

lua:40尝试在全局“shoottimer”(一个nil值)上执行算法

在代码中,它如下所示:

ShootCoolDown = 0.2
Shoottimer = ShootCoolDown 

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

我不知道出了什么问题

您不必初始化dt变量,它已经为您完成了。如果您试图在
love.update
函数中获取增量时间,您确实可以直接访问
dt
变量,并且不会遇到任何问题,但此变量不是全局变量,因此如果您试图在其他位置访问此变量(例如您的
love.draw
函数或
player.lua
)您还有三个选择:

使用内置的
love.timer.getDelta
功能(推荐) 此函数可能是获取增量时间的最佳方法。下面是一个示例用法:

whatever*love.timer.getDelta()
很简单吧

生成全局增量时间变量 这并不是最好的方法,但它是一种选择。下面是一种方法和一些示例用法:

whatever*love.timer.getDelta()
爱.更新中

function love.update(dt)
  DeltaTime = dt
end
whatever = whatever*DeltaTime
function love.update(dt)
  player_move(dt)
end
function player_move(dt)
  whatever = whatever*dt
end
一些示例用法:

function love.update(dt)
  DeltaTime = dt
end
whatever = whatever*DeltaTime
function love.update(dt)
  player_move(dt)
end
function player_move(dt)
  whatever = whatever*dt
end
将局部dt变量传递给函数 这不是一个坏方法,它的真正问题在于,因为您是从
love.update
调用函数的,所以您的函数经常被调用(您可能不希望这样)

爱.更新中

function love.update(dt)
  DeltaTime = dt
end
whatever = whatever*DeltaTime
function love.update(dt)
  player_move(dt)
end
function player_move(dt)
  whatever = whatever*dt
end
一些示例用法:

function love.update(dt)
  DeltaTime = dt
end
whatever = whatever*DeltaTime
function love.update(dt)
  player_move(dt)
end
function player_move(dt)
  whatever = whatever*dt
end

dt=DeltaTime
在您设置的全局示例中是向后的
DeltaTime=dt
是正确的,因为您正在将
dt
分配给
DeltaTime