Попытка выполнить арифметику для табличного значения: сообщение об ошибке Lua

stage:addEventListener(Event.ENTER_FRAME, 
function()
Graphic:setRotation(Graphic:getRotation()+ (Timer.delayedCall(math.random(4, 8) , 
function () speed = math.random(1, 30) 
return speed
end)
))
end)

Basicallu, то, что я пытаюсь сделать, это изменить скорость вращения случайным образом, но, поскольку я не хочу, чтобы она менялась каждую секунду, я попытался использовать Timer.delayedCall в Gideros, но он выдает ошибку, которая говорит attempt to perform arithmetic on a table value: Lua error message, Как я могу это исправить?

1 ответ

Решение

Согласно документации Gideros, Timer.delayedCall возвращает объект "Таймер", который должен быть таблицей, на которую ссылается сообщение об ошибке. http://docs.giderosmobile.com/reference/gideros/Timer/delayedCall

Я не очень хорошо знаком с Гидеросом, но я верю, что вы захотите что-то ближе к этому:

stage:addEventListener(Event.ENTER_FRAME, 
    function()
        Timer.delayedCall(math.random(4,8), 
            function()
                Graphic:setRotation( Graphic:getRotation() + math.random(1,30) )
            end)
    end)

Тем не менее, это, вероятно, будет по-прежнему срабатывать при каждом событии ENTER_FRAME, просто каждое изменение будет задерживаться случайным образом. Вы можете захотеть использовать управляющую переменную, чтобы можно было ожидать только один таймер:

local timerPending=false
stage:addEventListener(Event.ENTER_FRAME, 
    function()
        if timerPending then return end
        timerPending=true
        Timer.delayedCall(math.random(4,8), 
            function()
                Graphic:setRotation( Graphic:getRotation() + math.random(1,30) )
                timerPending=false
            end)
    end)
Другие вопросы по тегам