我正在尝试使用Lua中的驼峰库对以löve2D编码的游戏进行OOP。一切正常。但是,当我尝试按以下方式使用代码时,出现一条消息错误,告诉我“ self”是一个零值。有人可以告诉我我做错了什么吗?
Item=Class{
init=function(x,y,size)
self.x=x
self.y=y
self.size=size
self.dx=dx
self.dy=dy
self.dx2=dx2
self.dy2=dy2
end;
update=function(dt)
self.dx=self.dx+self.dx2
self.x=self.x+self.dx*dt
self.dy=self.dy+self.dy2
self.y=self.y+self.dy*dt
end;
coliide=function(ball)
return math.sqrt((self.x-ball.x)^2+(self.y-ball.y)^2)<self.size
end;
reset=function()
self.x=love.graphics.getWidth()/2
self.y=love.graphics.getHeight()/2
self.dy=0
self.dx=0
self.dy2=0
self.dx2=0
end
}
谢谢和问候
在给定的片段中
Item = Class{}
Item.init=function(x,y,size)
self.x = x
end
self
是nil
因为您没有定义它。
为了执行您想要的操作,您必须定义如下函数:
Item.init = function(self, x, y, size)
self.x = x
end
然后这样称呼它
Item.init(Item, x, y, size)
然后self等于Item,您可以将其索引而不会出错。
为了使此操作更加方便,我们可以使用“语法糖”
让我们看一下Lua 5.3参考手册:
调用
v:name(args)
是的语法糖v.name(v,args)
,但调用v
仅被评估一次。
冒号语法用于定义方法,即具有隐式额外参数self的函数。因此,该声明
function t.a.b.c:f (params) body end
是语法糖
t.a.b.c.f = function (self, params) body end
利用这些知识,我们可以简单地编写:
function Item:init(x,y,size)
self.x = x
end
并这样称呼它:
Item:init(x,y)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句