2016-07-28 55 views
2

好了,所以我有一个游戏,我在运行时监听器使用此功能:将参数传递给运行时事件侦听器?

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

通过Google搜索一下,我发现你可能使用了电晕。从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 
0

请与敌人表(表),并呼吁他们在enterFrame功能做。所以,当敌人死亡时,将它从列表中删除。

local enemies = {enemy1, enemy2} 

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

Runtime:addEventListener("enterFrame", myListener)