最近,我一直致力于一个游戏项目,并决定学习如何在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
这让我感到疑惑。有没有办法从位于按钮表中的函数检查菜单表中的值?
答案 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
。