2016-07-28 52 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)