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