2016-07-28 5 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

私はあなたがおそらくコロナを使用していることを少しわかりました。そして、the documentationから、私はあなたがイベント名に加えて関数を渡さなければならないことを読んだ。

これは、関数を定義するときに名前を付けてから、イベントを削除するときに参照する必要があることを意味します。

例えば

:あなたは敵にそれぞれの敵や敵やハイテクのIDまたは類似して参照することができ、いくつかのストレージのための機能を保存しようとすることができ

function myFunction() 
    -- code 
end 

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

。あなたが例えば

-- 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) 
関連する問題