在父对象中检查值

最近,我一直在做游戏项目,并决定学习如何在love2d中从头开始制作gui。我决定使用oop,在菜单对象中有菜单对象和按钮对象。我有一个问题,我只想在菜单处于活动状态时绘制按钮。这可能是最简单/最好的方法是在菜单对象中有一个函数来检查菜单是否处于活动状态,并在这种情况下绘制按钮,例如...

menu = {
 -- 菜单内容
button = require("path")
active = false,
buttons = {}
}
function menu.newButton()
--从按钮表中创建新的按钮对象
end
function menu:drawButton()

   if self.active then
       for k,v in pairs(buttons)
          menu.buttons[k]:draw() -- 一些绘制函数,设置按钮的大小、位置和颜色
       end
   end
end

这让我想知道。有没有一种方法从按钮表中的函数中检查菜单表中的值?

点赞
用户134758
用户134758

你可以使用组合技术从一个按钮对象中访问菜单对象的属性。要实现这个,你需要在创建每个新按钮时将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())

将打印btn对象从menu对象中的name属性。

2016-08-24 19:12:35