我目前正在审核该代码。
在审核期间,我收到了一些问题。
这是接收活动的部分的代码内容。
EventManager.cs:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
namespace wp.events
{
delegate void WordEventDelegate(object obj, EventArgs e); // 델리게이트 선언
class EventManager : WordGameSingleton<EventManager> // 싱글톤 상속받음
{
public event WordEventDelegate wordeSendEvent; // 이벤트 델리게이트 선언
public void dispatchEvent(object obj, EventTypes type, Hashtable data = null) // 이벤트 수신
{
GameEvent evt = new GameEvent ();
evt.obj = obj; // 받은 이벤트의 객체
evt.eventType = type; // 받은 이벤트의 타입
evt.evetData = data; // 받은 이벤트의 데이터
wordeSendEvent (this, evt);
}
public void addEvent(WordEventDelegate wedlistener) // 이벤트를 추가함
{
wordeSendEvent += wedlistener;
}
public void removeEvent(WordEventDelegate wedlistener) // 이벤트를 삭제함
{
wordeSendEvent -= wedlistener;
}
}
}
我将EventTypes设置为代码中的枚举。
例如..
public enum EventTypes
{
GAME_INIT,
...
}
注册事件作为接口实现,object和EventArgs设置为参数。
例如..
interface IWordGame
{
void onHandleEvent(object sender, EventArgs e);
}
当游戏启动时,它会在init()函数中添加一个事件。
例如..
public void init()
{
EventManager.Instance.addEvent(onHandleEvent);
}
我明白甚至添加事件。 但是,我不知道为什么要再次删除添加的事件。
该部分显示在下面的代码中。
public void onHandleEvent(object sender, EventArgs e)
{
GameEvent evt = e as GameEvent;
Debug.Log(">> event type : " + evt.type);
switch(evt.type)
{
case EventTypes.INTRO_STAR:
EventManager.Instance.removeEvent(onHandleEvent);
break;
}
}
我很好奇。我不明白为什么我要删除添加的事件。
你能澄清一下吗?
请作为初学者帮助我。
答案 0 :(得分:3)
此模式仅用于侦听任何特定事件一次。例如在您的情况下初始化游戏。如果您不会从事件中取消订阅处理程序,则会在触发事件时继续接收调用。
以下是您的代码所做的事情:
这将订阅/注册到EventManagers的wordeSendEvent
:
public void init()
{
EventManager.Instance.addEvent(onHandleEvent); // subscribing
}
onHandleEvent是wordeSendEvent
的监听器。第一次触发此事件时,将调用onHandleEvent
。
它将取消订阅EventManager的wordeSendEvent
:
case EventTypes.INTRO_STAR:
EventManager.Instance.removeEvent(onHandleEvent); // unsubscribing
break;
希望这有帮助。