Я как-то понимаю основы ООП с помощью lua, используя метатеги. но все становится немного волосатым, когда я действительно намереваюсь подклассировать экранный объект. Я не верю, что сам объект отображения можно передать в функцию setmetatable. Я бы очень хотел добавить дополнительные функции к экранному объекту напрямую.Corona SDK, ООП с экранными объектами
, например .. вот мой 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
Тогда да, вы, вероятно, не сможете передать это, чтобы установить метрику. Вы можете использовать __index (или цепочки __index), чтобы позволить 'ply: setFillColor (...)' работать, хотя обеспечение того, чтобы вы получили правильный объект, переданный правой функции с такой цепочкой, может быть сложным. –