Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop Lua继承与方法_Oop_Inheritance_Lua_Love2d - Fatal编程技术网

Oop Lua继承与方法

Oop Lua继承与方法,oop,inheritance,lua,love2d,Oop,Inheritance,Lua,Love2d,如何从类actor继承新类player,并使用相同参数在方法player:new(x,y,s)中调用方法actor:new(x,y,s)。我需要使player:new相同,但具有附加参数,以便player比actor具有更多属性 有没有办法不仅在new方法中,而且在其他方法中,比如player:move(x,y)将调用actor:move(x,y)或self:move(x,y)并使用其他代码 我使用此模式在模块中创建类: local actor = {} function actor:new(

如何从类
actor
继承新类
player
,并使用相同参数在方法
player:new(x,y,s)
中调用方法
actor:new(x,y,s)
。我需要使
player:new
相同,但具有附加参数,以便
player
actor
具有更多属性

有没有办法不仅在
new
方法中,而且在其他方法中,比如
player:move(x,y)
将调用
actor:move(x,y)
self:move(x,y)
并使用其他代码

我使用此模式在模块中创建类:

local actor = {}

function actor:new(x, y, s)

    self.__index = self

    return setmetatable({
        posx = x,
        posy = y,

        sprite = s
    }, self)
end

-- methods

return actor

实现这一点的一个好方法是使用单独的函数初始化实例。然后,您可以在继承的类中简单地调用基类初始化

如本例所示:

您只需执行以下操作:

actor = CreateClass()
function actor:_init(x,y,s)
  self.posx = x
  self.posy = y
  self.sprite = s
end

player = CreateClass(actor)
function player:_init(x,y,s,name)
  actor.init(self, x,y,s)
  self.name = name or "John Doe"
end

谢谢你的时间和答案!
actor = CreateClass()
function actor:_init(x,y,s)
  self.posx = x
  self.posy = y
  self.sprite = s
end

player = CreateClass(actor)
function player:_init(x,y,s,name)
  actor.init(self, x,y,s)
  self.name = name or "John Doe"
end