检查父对象中的值

时间:2016-08-24 18:15:00

标签: oop user-interface lua

最近,我一直致力于一个游戏项目,并决定学习如何在love2d中从头开始制作一个gui。我决定使用OOP,我在菜单对象中有菜单对象和按钮对象。我有一个问题,我只想在菜单处于活动状态时才绘制按钮。最简单/最好的方法可能是在菜单对象中有一个函数来检查菜单是否处于活动状态,如果它是这样的话就画出按钮......

menu = {
 -- menu stuff
button = require("path")
active = false,
buttons = {}
} 
function menu.newButton()
--create new button object from button table
end    
function menu:drawButton()

   if self.active then
       for k,v in pairs(buttons)
          menu.buttons[k]:draw() -- some draw function that sets the size, pos, and color of the button
       end
   end 
end

这让我感到疑惑。有没有办法从位于按钮表中的函数检查菜单表中的值?

1 个答案:

答案 0 :(得分:2)

您可以使用合成来从Button访问Menu对象的属性。为此,您需要在构造每个新Button时传递对menu对象的引用。例如:

Button = {}

function Button.new (menu)
   return setmetatable({menu = menu}, {__index = Button})
end

function Button:getMenuName()
   return self.menu.name
end

menu = {
   name = "menu1",
   buttons = {},
}

function menu:newButton ()
   local button = Button.new(self)
   table.insert(self.buttons, button)
   return button
end

local btn = menu:newButton()
print(btn:getMenuName())

会从对象name打印menu的属性btn