我有點了解OOA的基本知識,使用lua使用metatables。但是當我真的打算爲顯示對象創建子類時,事情會變得有點多毛。我不相信我可以將顯示對象本身傳遞給setmetatable函數。我真的很想直接向顯示對象添加額外的功能。Corona SDK,帶顯示對象的OOP
例如..這裏是我的player.lua文件
local player = {}
local player_mt = { __index = player } -- metatable
function player.new(world) -- constructor
local obj = display.newRect(world, 0, 0, 20, 20)
obj:setFillColor(1,0,0)
local tbl = { obj = obj }
return setmetatable(tbl, player_mt)
end
function player:fillColor(r,g,b)
self.obj:setFillColor(r,g,b)
end
function player:setPos(x,y)
self.obj.x, self.obj.y = x,y
end
return player
這工作了好..但我真的很喜歡self
提及我obj
變量。當我使用這個「課程」時,我總是必須通過說player.obj
來引用顯示對象。我寧願它只是player
任何方式來完成這個或更好的方法?
只是嘗試直接使用我的形狀對象,並在我更新的播放器對象上調用fillColor
。說它不能叫fillColor
上零
local player = {}
local player_mt = { __index = player } -- metatable
function player.new(world) -- constructor
local obj = display.newRect(world, 0, 0, 20, 20)
obj:setFillColor(1,0,0)
return setmetatable(obj, player_mt)
end
function player:fillColor(r,g,b)
self:setFillColor(r,g,b)
end
return player
是'OBJ 「一張桌子?用戶數據?還有別的嗎?如果這就是你想要的,你可以將每個不匹配的查找從'tbl'轉換爲'obj'。 –
obj是一個顯示對象。 https://docs.coronalabs.com/api/type/ShapeObject/index.html – hamobi
那麼是的,你可能無法通過setmetatable。您可以使用__index(或__index鏈)來允許'ply:setFillColor(...)'工作,雖然可以確保將正確的對象傳遞給正確的函數,但這樣的鏈可能很複雜。 –