luaによるリスナーの実現
2409 ワード
リスナーは,文字通り傍受に用いられ,プログラム上の役割も事実上そうである.
例えば、ゲームの王者の栄光の中で、すべての小兵が現れた時間、小龍が初めて現れた時間、第1波の野怪が現れた時間は固定されています.つまり、時間が来るとすぐに現れます.それ以外にも、一波の野怪がすべて死んで次の波と同じ位置に野怪が再び現れるまでの時間間隔も固定されている.リスナーを用いて,リスニング時間,到達点自動トリガ法により,対応する野怪やドラゴンを再生成することができる.
luaファイルを作成するlua(javaクラスと見なすことができる)
クラス内のメソッドの説明: addEventListener(event,listener):リスナーを追加 dispatchEvent(event,data):実行リスナー removeEventListener(event,listener):リスナー を削除 hasEventHandler(event,listener):リスナーがあるかどうかを判断する clear():Listener をクリア
以上がリスナークラスの具体的な実装であり、野怪をリフレッシュする機能に対応している.大体は、野怪をタッチする場所にリスナーaddEventListenerを追加し、前の野怪が死んだ時間から野怪をリフレッシュする要求に達すると、dispatchEventがリスニングを実行し、野怪がリフレッシュし、ゲーム終了時にremoveEventListenerを呼び出してリスニングを削除することを意味する.
例えば、ゲームの王者の栄光の中で、すべての小兵が現れた時間、小龍が初めて現れた時間、第1波の野怪が現れた時間は固定されています.つまり、時間が来るとすぐに現れます.それ以外にも、一波の野怪がすべて死んで次の波と同じ位置に野怪が再び現れるまでの時間間隔も固定されている.リスナーを用いて,リスニング時間,到達点自動トリガ法により,対応する野怪やドラゴンを再生成することができる.
luaファイルを作成するlua(javaクラスと見なすことができる)
クラス内のメソッドの説明:
eventDispatcher=
{
eventTb={} -- eventTb, , eventTb nil。
}
-- event: , , , “legendaryRefresh”
-- listener: ( )
function eventDispatcher:addEventListener(event,listener)
print("add event listener:",event,listener)
if(listener==nil)then
do return end
end
if(self.eventTb[event]==nil)then
self.eventTb[event]={}
end
local flag=false
for k,v in pairs(self.eventTb[event]) do
if(v==listener)then
flag=true
break
end
end
if(flag==false)then
table.insert(self.eventTb[event],listener)
end
end
function eventDispatcher:removeEventListener(event,listener)
print("remove event listener:",event,listener)
if(listener==nil or self.eventTb[event]==nil)then
do return end
end
local length=#self.eventTb[event]
for i=1,length do
if(self.eventTb[event][i]==listener)then
table.remove(self.eventTb[event],i)
i=i-1
end
end
end
-- data
function eventDispatcher:dispatchEvent(event,data)
print("dispatch event:",event)
if(self.eventTb[event])then
for k,v in pairs(self.eventTb[event]) do
print("listener:",v)
if(v)then
v(event,data) -- ,
end
end
end
end
function eventDispatcher:hasEventHandler(event,listener)
if(self.eventTb[event]==nil)then
return false
end
if(listener==nil)then
if(self.eventTb[event] and #self.eventTb[event]>0)then
return true
else
return false
end
end
for k,v in pairs(self.eventTb[event]) do
if(v==listener)then
return true
end
end
return false
end
function eventDispatcher:clear()
self.eventTb={}
end
以上がリスナークラスの具体的な実装であり、野怪をリフレッシュする機能に対応している.大体は、野怪をタッチする場所にリスナーaddEventListenerを追加し、前の野怪が死んだ時間から野怪をリフレッシュする要求に達すると、dispatchEventがリスニングを実行し、野怪がリフレッシュし、ゲーム終了時にremoveEventListenerを呼び出してリスニングを削除することを意味する.