You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LOVE2d Lua开发遇attempt to compare nil with number报错 倒计时实现求助

错误原因分析
  • 变量未初始化:你没有给全局变量t赋初始值,首次调用t = t + 0.01时t是nil,和数字比较/运算就会抛出你遇到的错误。你搜到的tonumber()是用于将字符串等其他类型值转为数字的工具函数,你的问题是变量本身没有值,不是类型不匹配,所以用tonumber()根本解决不了当前问题。
  • love.load用法错误:LOVE2D的love.load回调是游戏启动时仅执行1次的初始化函数,本身不会传入timer参数,你写的while死循环会直接卡住游戏进程,根本进不了后续的帧更新和渲染逻辑。
  • 计时逻辑错误:你当前的t是做累加逻辑,和你需要的倒计时需求相反,而且硬编码加0.01的计时方式会受帧率波动影响,误差非常大。
正确倒计时实现方案

你可以直接复用下面的可运行代码,对应补充你自己的按钮点击、结束界面跳转逻辑即可:

-- 全局状态定义
local remaining_time = 20 -- 倒计时初始值20秒
local game_over = false -- 游戏结束状态标记
local click_count = 0 -- 你的点击计数变量

function love.load()
  -- 这里放你的其他初始化逻辑,比如随机按钮生成、资源加载等
end

function love.update(dt)
  -- 游戏结束后不再执行计时逻辑
  if game_over then return end

  -- 用LOVE2D提供的帧间隔时间dt做倒计时,精度不受帧率影响
  remaining_time = remaining_time - dt

  -- 倒计时归0时触发结束逻辑
  if remaining_time <= 0 then
    remaining_time = 0 -- 避免显示负数
    game_over = true
    -- 此处补充你跳转到结束界面的逻辑即可
  end
end

function love.draw()
  -- 显示倒计时,用math.ceil取整显示整数秒
  love.graphics.print("剩余时间: " .. math.ceil(remaining_time), 10, 10)
  -- 显示点击次数
  love.graphics.print("点击次数: " .. click_count, 10, 40)

  -- 结束界面提示示例
  if game_over then
    love.graphics.print("游戏结束!总点击数:" .. click_count, 300, 300)
  end
end

-- 你的按钮点击逻辑可以写在love.mousepressed回调中
function love.mousepressed(x, y, button)
  if game_over then return end
  -- 此处补充判断是否点击到随机按钮的逻辑,点击成功则click_count+1
end

内容的提问来源于stack exchange,提问作者Shukun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 15:18:01