Я использую класс Lua для создания двух объектов, каждый из которых должен проверять, где другой должен определять их движение. Я пытаюсь использовать timer.performWithDelay, чтобы они проверяли каждую секунду, но по какой-то причине, когда я пытаюсь это сделать, строка
o.moveCheckTimer = timer.performWithDelay(1000, o:moveCheck, 0)
в конструкторе класса выдает ошибку, утверждая, что «Аргументы функции ожидаются около ',' ".
Я попытался использовать анонимную функцию, подобную этой:
o.moveCheckTimer = timer.performWithDelay(1000, function() o:moveCheck() end, 0)
, но это заставляет таймер обоих объектов вызывать функцию только для большинства недавний объект, который был создан и не для себя (также очень запутанное поведение, и если кто-то знает, почему это происходит, я хотел бы узнать, почему).
Я тщательно изучил API и информацию о вызовах методов, но Кажется, я не могу найти ничего, что использует их вместе, и я чувствую, что что-то упустил.
Как я могу использовать вызов метода в качестве прослушивателя для этого таймера?
Вот полный конструктор:
Melee = {}
Melee.__index = Melee
function Melee:new(id, name, lane, side)
local o = {}
setmetatable(o, Melee)
o.id = id
o.name = name
o.lane = lane
o.side = side
if name == "spearman" then
o.maxhp = 100
o.range = 1
o.damage = {10, 20}
o.imageName = "images/rebels/spearman.png"
else
error("Attempted to create melee unit with undefined name")
end
o.hp = o.maxhp
--Display self
o.image = display.newImageRect(mainGroup, "images/rebels/spearman.png", 80, 80)
o.image.x = 0
o.image.y = lanes[lane]
o.image.anchorY = 1
if side == 2 then
o.image.xScale = -1
o.image:setFillColor(0.8)
o.image.x = display.contentWidth - 100
end
--Move and attack
local destination = display.contentWidth
if side == 2 then
destination = 0
end
o.moving = 1
o.movement = transition.to(o.image, {x = destination, time = 30000+math.random(-200,200)})
o.moveCheckTimer = timer.performWithDelay(1000, o:moveCheck, 0)
--o.attackTimer = timer.performWithDelay(1000, self:attack, 0)
return o
end