Я следовал этому уроку http://www.crawlspacegames.com/blog/inheritance-in-lua/ и создал 2 объекта (ударные и гитара), которые наследуются от MusicalInstrument. Все работало нормально, пока я не добавил функции таймера, тогда почему-то только 1 из 2 объектов, которые наследуются от MusicalInstrument, называется
MusicalInstrument.lua:
module(...,package.seeall)
MusicalInstrument.type="undefined"
local function listener()
print("timer action: "..MusicalInstrument.type)
end
function MusicalInstrument:play(tpe)
MusicalInstrument.type = tpe;
print("play called by: "..MusicalInstrument.type)
timer.performWithDelay(500,listener,3)
end
function MusicalInstrument:new( o )
x = x or {} -- can be parameterized, defaults to a new table
setmetatable(x, self)
self.__index = self
return x
end
Guitar.lua
module(...,package.seeall)
require("MusicalInstrument")
gtr = {}
setmetatable(gtr, {__index = MusicalInstrument:new()})
return gtr
Drums.lua
module(...,package.seeall)
require("MusicalInstrument")
drms = {}
setmetatable(drms, {__index = MusicalInstrument:new()})
return drms
main.lua
-- CLEAR TERMINAL --
os.execute('clear')
print( "clear" )
--------------------------
local drms=require("Drums")
drms:play("Drums")
local gtr=require("Guitar")
gtr:play("Guitar")
Это вывод терминала:
clear
play called by: Drums
play called by: Guitar
timer action: Guitar
timer action: Guitar
timer action: Guitar
timer action: Guitar
timer action: Guitar
timer action: Guitar
Я исключил выход для трех вызовов времени на гитаре и 3 вызовов таймера ударных
Любые идеи о том, как сделать эту работу, будут высоко оценены !!
Спасибо
----------------------------- Отредактировано после очередной попытки -------------- -----
Следующее изменение в MusicalInstrument
module(...,package.seeall)
MusicalInstrument.type="undefined"
function MusicalInstrument:listener()
print("timer action: "..MusicalInstrument.type)
end
function MusicalInstrument:play(tpe)
MusicalInstrument.type = tpe;
print("play called by: "..MusicalInstrument.type)
timer.performWithDelay(500,MusicalInstrument:listener(),3)
end
function MusicalInstrument:new( o )
x = x or {} -- can be parameterized, defaults to a new table
setmetatable(x, self)
self.__index = self
return x
end
Результат со следующим выводом:
clear
play called by: Drums
timer action: Drums
play called by: Guitar
timer action: Guitar
Таймер вызывал нужные инструменты, но только один раз