Lua/LÖVE游戏开发报错:尝试对nil值字段执行算术运算
错误原因及修复方案
核心问题
你遇到的attempt to perform arithmetic on field (a nil value)错误,以及Bullet的x/y为nil,根源是Bullet实例的创建方式错误,同时构造方法缺少必要的返回逻辑。
具体错误点与修复
- 实例创建语法错误
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
- 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
相关产品推荐
相关产品推荐

