Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5413822
  • 博文数量: 763
  • 博客积分: 12108
  • 博客等级: 上将
  • 技术积分: 15717
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-28 21:21
个人简介

业精于勤,荒于嬉

文章分类

全部博文(763)

文章存档

2018年(6)

2017年(15)

2016年(2)

2015年(31)

2014年(14)

2013年(87)

2012年(75)

2011年(94)

2010年(190)

2009年(38)

2008年(183)

2007年(28)

分类: C/C++

2012-01-11 16:23:35


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); // 这个方法一般需要被子类重写, 实现具体的逻辑

};

阅读(5548) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~