EventManager 和 EventCallbackList 类解释文档
概述
该文档描述了 EventManager
和 EventCallbackList
类,它们共同构成了一个游戏事件的分级广播管理系统。该系统允许注册、注销和触发事件,每个事件可以有不同的优先级。
头文件
1 2 3 4 5
| #include <vector> #include <functional> #include <unordered_map> #include "GameEvent.h" #include "Delegate.h"
|
<vector>
: 用于存储回调列表。
<functional>
: 提供了 std::function
。
<unordered_map>
: 用于快速查找事件信息。
"GameEvent.h"
: 包含游戏事件基类定义。
"Delegate.h"
: 包含委托类定义。
常量定义
1
| const int MAX_PRIORITY_COUNT = 11;
|
MAX_PRIORITY_COUNT
: 定义了最大优先级数量,优先级从 0 到 10。
GameEventPriority 类
1 2 3 4 5 6
| class GameEventPriority { public: const int Low = 0; const int Middle = 5; const int High = 10; };
|
GameEventPriority
: 定义了事件的优先级常量。
EventCallbackList 类
构造函数
成员函数
Add()
1
| void Add(Delegate<GameEventBase*>& action, int priority);
|
Remove()
1
| void Remove(Delegate<GameEventBase*>& delegate, int priority);
|
Invoke()
1
| void Invoke(GameEventBase* evt);
|
私有成员
callbackLists
: 存储回调列表。
cacheCallbackLists
: 存储缓存列表。
cacheDirty
: 标记缓存是否需要更新。
invokeCount
: 记录当前正在触发的回调数量。
私有成员函数
GetCallbacks()
1
| std::vector<Delegate<GameEventBase*>>* GetCallbacks();
|
- 返回当前应该操作的回调列表,如果是触发阶段则返回缓存列表。
EventManager 类
静态成员
_events
: 存储所有事件的回调列表。
_findEvents
: 用于快速查找事件信息。
成员函数
Register()
1 2
| template <typename T> static void Register(Delegate<T*>& callback, int priority = 5);
|
Unregister()
1 2
| template <typename T> static void Unregister(Delegate<T*>& callback);
|
SendEvent()
1 2
| template<typename T> static void SendEvent(T* evt);
|
私有结构
EventInfo
1 2 3 4 5
| struct EventInfo { int eventId; int priority; Delegate<GameEventBase*> action; };
|
注意事项
- 确保
GameEvent
和 Delegate
类已经正确实现。
- 使用
EventManager
时,应检查回调的有效性。
- 事件优先级应在有效范围内(0 到 10)。
- 在事件触发期间,不应修改回调列表。