将参数传递给运行时事件侦听器?

时间:2016-07-28 18:04:38

标签: lua corona

好的,我有一个游戏,我在运行时监听器中使用此函数:

local function moveenemy(target)

if(target.direction=="left") then

target:setSequence("left")
target:setLinearVelocity(-30,0)


else

target:setSequence("right")
target:setLinearVelocity(30,0)


end
end

我使用运行时监听器将所有游戏敌人作为参数传递:

Runtime:addEventListener("enterFrame",function() moveenemy(enemy1) end)
Runtime:addEventListener("enterFrame",function() moveenemy(enemy2) end)

所以现在当敌人死了,我需要删除它的监听器时,我该如何删除它。显然以下不起作用:

Runtime:removeEventListener("enterFrame",function() moveenemy(enemy1) end)
Runtime:removeEventListener("enterFrame",function() moveenemy(enemy2) end)

感谢。

2 个答案:

答案 0 :(得分:2)

通过谷歌搜索,我发现你可能正在使用Corona。从the documentation开始,我读到除了事件名称之外你还必须传递函数。

这意味着您需要在定义函数时为其命名,然后在删除事件时引用它。

例如:

function myFunction()
    -- code
end

-- add function to event
Runtime:addEventListener("enterFrame", myFunction)
-- remove function from event
Runtime:removeEventListener("enterFrame", myFunction)

您可以尝试将每个敌人的功能存储到敌人或某些存储器中,您可以使用敌人或您的ID或类似物品。你可以这样做,例如

-- add function to event
enemy1.Event = function() moveenemy(enemy1) end
Runtime:addEventListener("enterFrame", enemy1.Event)

-- remove function from event
Runtime:removeEventListener("enterFrame", enemy1.Event)
enemy1.Event = nil

答案 1 :(得分:0)

与敌人制作一张桌子(列表)并在enterFrame函数中调用它们。因此,当敌人死亡时,将其从列表中删除。

local enemies = {enemy1, enemy2}

local myListener = function( event )
    for i=1, #enemies do
       moveenemy(enemies[i])
    end
end

Runtime:addEventListener( "enterFrame", myListener )