当监听器中包含括号时,
timer.performWithDelay( delay, listener [, iterations] )
timer.performWithDelay()
无法延迟函数调用。
如果我尝试在
中声明一个函数timer.performWithDelay()
它给出了语法错误。
那么如何使用timer.performWithDelay()中包含的函数传递参数/对象?
我的代码:
local normal_remove_asteroid
normal_remove_asteroid = function (asteroid)
asteroid:removeSelf()
asteroid = nil
end
timer.performWithDelay(time, normal_remove_asteroid (asteroid) )
答案 0 :(得分:0)
在Lua中,()
是函数调用运算符(除了function
关键字旁边):如果对象是函数,或者有__call方法,则会立即调用它。因此,将normal_remove_asteroid(asteroid)
提供给performWithDelay
实际上会为其提供normal_remove_asteroid
函数调用的返回值。如果你想将argumnents传递给函数,你必须创建一个不带任何argumnents的临时匿名函数:
local asteroid = ....
...
timer.performWithDelay(time, function() normal_remove_asteroid (asteroid) end )
匿名函数中的asteroid
是一个upvalue;它必须在该行之上的某处定义(由于您在normal_remove_asteroid(asteroid)
中使用它,因此在代码中必须已经是这种情况。)
请注意,您没有 使用匿名函数:您还可以显式定义包装函数,但为什么还要命名它,它只是包装:
function wrap_normal_remove_asteroid()
normal_remove_asteroid (asteroid)
end
timer.performWithDelay(time, wrap_normal_remove_asteroid)