我正在 Lua 和 LOVE2d 中遇到错误:“尝试将 nil 与数字进行比较”

我正在尝试用 lua 和 love 制作我的第一个游戏。游戏是一个简单的按钮点击器,它计算您点击随机出现按钮的次数。我正在尝试在屏幕上添加一个倒计时计时器(最终使得在计时器归零时出现结束屏幕)。

function love.update(dt)
  t = t + 0.01
end

function love.load (timer)
  while t > 0 do
    if t % 1 == 0 then
      timer = 1 + timer
    end
  end
end

但我得到了这个错误:“尝试将 nil 与数字进行比较” 我搜索并找到了tonumber(),但我不知道如何正确使用它。 我甚至不确定这是否是制作计时器的最佳/一种方法……请帮忙?

原文链接 https://stackoverflow.com/questions/70236187

点赞
stackoverflow用户2858170
stackoverflow用户2858170

爱会为您调用 love.load。当评估您的 while 条件 t > 0 时,它会抛出此错误,因为 t 不是数字,而是 nil 值。在比较它与另一个数字之前,您需要使用数字值初始化 t。

我并不是有意冒犯,但是您的代码并没有太多意义。

首先,您没有使用值初始化 t。因此,您无法对其执行任何操作。

function love.update(dt)
  t = t + 0.01
end

love.load 在游戏开始时执行一次。timer 实际上是一个包含游戏命令行参数的表值。因此,通过将其增加 1 没有任何意义。

function love.load (timer)
  while t > 0 do
    if t % 1 == 0 then
      timer = 1 + timer
    end
  end
end

即使 t 是一个数字,t % 1 总是 0。因此,将其与 0 进行比较没有意义。此外,您的代码除了试图分别增加值 1 或 0.01 之外,什么也没有做。

确保您查阅 love 和 Lua 手册以获取您使用的所有内容。

https://love2d.org/wiki/love.run <- 这非常重要,以便您了解这些函数的执行方式。

https://love2d.org/wiki/love

2021-12-06 09:26:02
stackoverflow用户17783369
stackoverflow用户17783369

尝试添加:

function love.load()
    t = 0
end

我也注意到了 love.load() 中的 while t > 0 do,它不会按照你的期望工作,因此请尝试将其放在 love.update(dt) 中。

2022-05-02 15:43:27
stackoverflow用户20422121
stackoverflow用户20422121

但是如果你想要 while 循环永远循环下去,你可以这样写:

While true do
   timer = timer + 1
   wait(1)
end

如果这不能解决问题,请尝试使用以下代码:

While true do
   timer = timer + 1
   task.wait(1)
end
2022-11-05 02:15:58
stackoverflow用户20422121
stackoverflow用户20422121

如果你想让它倒计时,使用 for 循环。

for i=1,10,-1 do
   timer = i
   wait(1)
end
2022-11-05 02:19:44