好的,我有一个游戏,我在运行时监听器中使用此函数:
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)
感谢。
答案 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 )