2016-07-28 11 views
2

Okay, so habe ich ein Spiel, in dem ich diese Funktion in einer Runtime-Hörer verwenden:Parameter an einen Laufzeit-Ereignis-Listener übergeben?

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 

Und ich verwende eine Laufzeit Zuhörer alle Feinde mein Spiel als Parameter wie weitergeben müssen:

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

So Wenn der Feind tot ist und ich seinen Zuhörer entfernen muss, wie entferne ich ihn. Scheinbar funktioniert folgendes nicht:

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

Danke.

Antwort

2

Durch ein wenig googeln fand ich heraus, dass Sie wahrscheinlich Corona verwenden. Und von the documentation habe ich gelesen, dass Sie die Funktion zusätzlich zum Ereignisnamen übergeben müssen.

Dies würde bedeuten, dass Sie Ihre Funktion benennen müssen, wenn Sie sie definieren und dann darauf verweisen, wenn Sie das Ereignis entfernen.

Zum Beispiel:

function myFunction() 
    -- code 
end 

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

Sie versuchen, die Funktionen für jeden Feind zu den Feinden speichern könnten oder einen Speicher an, die mit dem Feind oder hallo der ID oder ähnlichem beziehen. So können Sie zum Beispiel

tun konnte
-- 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

Machen Sie eine Tabelle (Liste) mit den Feinden und nennen sie in enterFrame Funktion. Wenn der Feind stirbt, entferne ihn also von der Liste.

local enemies = {enemy1, enemy2} 

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

Runtime:addEventListener("enterFrame", myListener) 
Verwandte Themen