timer.performWithDelay()的用法

时间:2014-10-03 18:51:44

标签: lua

当监听器中包含括号时,

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) )

1 个答案:

答案 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)