luaoop类的多个实例被忽略,为什么?
我有一个叫做Edit的类luaoop类的多个实例被忽略,为什么?,oop,lua,Oop,Lua,我有一个叫做Edit的类 function Edit:new(x,y,w,h,text,fnt) o = {} setmetatable(o,EditMt) self.__index = self self.x = x or 0 self.y = y or 0 self.width = w or 10 self.height = h or 10 self.text = text or "" self.ac
function Edit:new(x,y,w,h,text,fnt)
o = {}
setmetatable(o,EditMt)
self.__index = self
self.x = x or 0
self.y = y or 0
self.width = w or 10
self.height = h or 10
self.text = text or ""
self.active = false
self.font = fnt or font
self.yo = -(self.height - self.font:getHeight()) / 2
return o
end
该类有一个名为DrawMake with Löve2d的函数
function Edit:draw( )
if self.active then
love.graphics.setColor(255,255,255,255)
love.graphics.rectangle("fill",self.x,self.y,self.width,self.height)
love.graphics.setColor(0,0,0,255)
love.graphics.printf(self.text,self.font,self.x,self.y,self.width, "center",0,1,1,0,self.yo)
else
love.graphics.setColor(255,255,255,255)
love.graphics.rectangle("line",self.x,self.y,self.width,self.height)
love.graphics.printf(self.text,self.font,self.x,self.y,self.width, "center",0,1,1,0,self.yo)
end
end
在我的主要作品中,我创作了两部
edit1 = Edit:new(10,10,60,50,"1")
edit2 = Edit:new(80,10,60,50,"2")
并在回调中绘制它们
function love.draw( )
edit1:draw()
edit2:draw()
end
但它只画了edit2?如果我在draw中切换位置,它仍然只会绘制edit2,但是如果我在main中创建位置时切换位置,它现在只绘制edit1?这是初学者在Lua中使用OOP时最常见的错误 您正在将所有这些值分配给正在编辑的self。但如果您想更改实例,则需要将它们分配给o 否则,每次调用Edit.new都将覆盖这些值 第二个问题是您的实例o是全局的。你需要它是本地的!或者每次都将覆盖实例
function Edit:new (x,y,w,h,text,fnt)
local o = {}
setmetatable(o, self)
self.__index = self
o.x = x or 0
o.y = y or 0
-- and so forth
return o
end
请阅读以下内容:
这是初学者在Lua中使用OOP时最常见的错误 您正在将所有这些值分配给正在编辑的self。但如果您想更改实例,则需要将它们分配给o 否则,每次调用Edit.new都将覆盖这些值 第二个问题是您的实例o是全局的。你需要它是本地的!或者每次都将覆盖实例
function Edit:new (x,y,w,h,text,fnt)
local o = {}
setmetatable(o, self)
self.__index = self
o.x = x or 0
o.y = y or 0
-- and so forth
return o
end
请阅读以下内容:
您启动的对象不太正确 在新函数中,你启动你的对象,而在这个函数中,你的自我是你的可变形的 创建全局对象o的另一个问题 因此,您的新功能必须是: 函数编辑:newx,y,w,h,text,fnt 局部o={} 赛尔夫 self.\uuu索引=self o、 x=x或0 o、 y=y或0 o、 宽度=w或10 o、 高度=h或10 o、 text=文本或 o、 活动=错误 o、 font=fnt或font o、 yo=-o.height-o.font:getHeight/2 返回o 终止
您启动的对象不太正确 在新函数中,你启动你的对象,而在这个函数中,你的自我是你的可变形的 创建全局对象o的另一个问题 因此,您的新功能必须是: 函数编辑:newx,y,w,h,text,fnt 局部o={} 赛尔夫 self.\uuu索引=self o、 x=x或0 o、 y=y或0 o、 宽度=w或10 o、 高度=h或10 o、 text=文本或 o、 活动=错误 o、 font=fnt或font o、 yo=-o.height-o.font:getHeight/2 返回o 终止