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
相关产品推荐
相关产品推荐

