Lua游戏客户端框架通用功能模块

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单例接口

你可能感兴趣的:(lua,游戏,开发语言)