Попытка выполнить арифметику для табличного значения: сообщение об ошибке 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)