4.1 *EventLib 事件系统
4.1.1 事件系统原理
事件系统大致分为三个模块:EventMgr(事件管理者)、EventLib(事件)、Eventname(事件码)。事件管理者(EventMgr)负责事件的广播和注册,注册的事件会新建一个事件对象(EventLib)并存储在一个events列表当中,事件码作为这个表的key。每个事件都需要注册一个事件码(Eventname)用于区分,在C#里通常是用枚举类型实现,而在lua里通过表和字符串的形式实现。而function类型的方法则会存储在handlers中,在C#里一般是用delegate字段定义成委托类型,而在lua里可以直接把方法作为参数进行传递。注意,在此处function是以key的形式存储,而value值统一赋一个true的值。当事件管理者触发事件进行广播之后,就会执行事件列表里的所有方法。
4.1.2 事件码的注册
当我们需要新定义一个事件的时候,需要先在event_name中定义一个event_name类的字符串变量,字符串的内容最好与变量名保持一致。并在当前一行写好注释,以供他人复用。
4.1.3 事件的触发
在需要触发事件的地方用EventMgr提供的Instance单例接口执行Fire方法,传入事件码以及若干个参数。
EventMgr.Instance:Fire(event_name.backpack_change, baseIdDict)
4.1.4 事件的监听
进行事件监听之前需要用EventMgr提供的Instance单例接口