1> 使用触发器管理游戏对象的理念
触发器,可以简单理解为游戏中的一个小事件, 在满足条件的时候, 可以触发此事件。可以细化为以下几个类型.
触发器的功能划分:
1> 管理游戏中存在的对象, 统一对象的初始化和释放工作。
2> 判断某个技能,对象是否存在。
3> 得到某个技能,对象的还剩下多少存活时间。
4> 得到当前类型触发器对象的个数
5> 显示 Z 轴排序。
6> 对象的查找
7> 对象的遍历
时间触发: 在时间条件满足时,触发一次。比如游戏中,技能的 持续时间, 物品影响的持续时间, 等等。
触发器用接口实现,
每一个触发器都有自己的生存时间。
// 触发器事件
typedef enum
{
TriggerEvent_Null = 0,
TriggerEvent_LifeTime, // 生命周期到
TriggerEvent_KeepTime, // 效果哦持续时间到
TriggerEvent_IntervalTime, // 间隔时间到
TriggerEvent_End
}TriggerEvent;
// 触发器 类型 (当前对象实例的类型)
typedef enum
{
TriggerType_Null = 0,
TriggerType_ZD,
TriggerType_Skill,
TriggerType_Hero,
TriggerType_Attacker,
TriggerType_DefenTower,
TriggerType_End
}TriggerType;
// 触发器对象
class Trigger
{
public :
int id_unique; // uid 数据,唯一表示一个触发器。有系统自动生成,游戏中,所有触发器的 id_uinique 都是不同的
int id_father; // 父亲对象的 uid
int id_type; // 触发器类型, 表示当前是那种类型的触发器
int id_trigger; // 出发器 id , 表示当前类型下面的,那个触发器信息
float lifeTime; // 生存时间,此数值在游戏中不断减小, 当减小到0时,会被释放掉,如果初始化 为 -1, 表示生命周期不受限制
float keepTime; // 某种效果的持续时间, 当数值减小到 0 时,效果消失
float intervalTime; // 触发事件间隔, (处理循环出发的事件)
float intervalTimeMax;
public :
};
// 触发器管理
class TriggerMannger
{
public:
NSMulitbleDictionary* dictAllTrigger; // 存储所有的触发器对象, 使用 uid 来作为 key
NSMulitbleDictionary* dictType; // NsmultibleArray 对象, 存储某个触发器种类的指针。使用 id_type 来作为 key
public:
TriggerMannger* Instance(); // 单例模式
Trigger* TriggerAdd(int _idType, int _idTrigger); // 增加一个触发器
Trigger* TriggerGet(int _idType, int _idTrigger); // 返回第一个符合条件的触发器
Trigger* TriggerGet(int _idUnique); // 返回指定的触发器
NsmultibleArray* TriggerGetArr(int _idType); // 得到当前类型下面的所有触发器对象,
void TriggerFreeUid(int _idUnique); // 释放某个指定的触发器
void TriggerFreeObj(Trigger* _triger); // 释放某个指定的触发器
void TriggerFree(int _idType); // 释放指定类型的所有触发器数据
void TriggerFreeAll(); // 释放所有触发器数据
TriggerEvent TriggerUpdate(float _dt); // 这个方法一般需要被子类重写, 实现具体的逻辑
};
阅读(5627) | 评论(0) | 转发(1) |