Как использовать timer.performWithDelay с вызовом метода - PullRequest
1 голос
/ 30 апреля 2020

Я использую класс 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
...