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

Lua/LÖVE游戏开发报错:尝试对nil值字段执行算术运算

错误原因及修复方案

核心问题

你遇到的attempt to perform arithmetic on field (a nil value)错误,以及Bullet的x/y为nil,根源是Bullet实例的创建方式错误,同时构造方法缺少必要的返回逻辑。

具体错误点与修复

  1. 实例创建语法错误
    classic类库中创建类实例必须使用:new()语法,你现在直接调用Bullet(...),会导致无法生成正确的Bullet实例,插入到ListOfBullets的对象无效,自然x/y属性为nil。

修复Player的keyPressed方法:

function Player:keyPressed(key)
    if key == "space" then
        -- 改用:new()创建实例
        table.insert(ListOfBullets, Bullet:new(self.x, self.y, self.state))
    end
end
  1. Bullet构造方法缺少返回语句
    classic类的:new方法需要返回创建好的实例对象,否则实例无法正确初始化。你的Bullet:new方法没有返回self,导致实例属性无法被正确赋值。

修复Bullet的:new方法:

function Bullet:new(xpos,ypos,state)
    self.x = xpos
    self.y = ypos
    self.state = state
    self.speed = 700
    self.r = 10
    return self -- 添加返回语句,返回实例
end

额外检查

还要确保你的Player实例是正确创建的,即Player.x、Player.y、Player.state本身不是nil——如果Player的这些属性也是nil,那传入Bullet的参数也会是nil,导致Bullet的x/y依然为空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:45:29