По какой-то причине код ниже порождает ошибку переполнения стека, если оператор else выполняется слишком много раз. Я пытаюсь, чтобы функция scene.targeting выбрала цель из objTable
, переданную в параметрах, но действительны выборы только с .tgtFlag == false
. Если функция выбирает цель, которая имеет .tgtFlag == true
, она вызывает функцию scene.targeting, проходящую в том же наборе параметров.Переполнение стека Lua в рекурсивной функции в короне sdk
Линия, которая ломается, local theTarget = params.objTable[math.random(1, #params.objTable)]
, но только после else scene.targeting(params) end
вызывается несколько раз.
Любая помощь была бы принята с благодарностью.
function scene.targeting(params) -- Targeting functions
function animateTarget(target)
if target.savedFlag == false then
transition.to(target, {time = 100, y = target.y - 15})
transition.to(target, {time = 100, delay = 150, y = target.y, onComplete = animateTarget} )
end
end
local theTarget = params.objTable[math.random(1, #params.objTable)]
if theTarget.tgtFlag == false then
theTarget.tgtFlag = true
animateTarget(theTarget)
else
scene.targeting(params)
end
end
Я не знал о вызовах хвоста. Отличный маленький трюк, чтобы не использовать стек. – joed4no