网络游戏战斗系统之skill系统具体设计实现

    网络游戏的战斗系统中,技能是战斗单元释放作用在目标上造成一系列的技能效果。一个战斗单元可以拥有多个技能,根据玩家操作或者自动,判断技能释放满足条件(cd,魔力等条件)释放技能,这时候根据技能生成一个技能Action对象,最终在目标上生效。

    每一个战斗单元需要一个skillManger对象管理其拥有技能(skill对象),skill对象保存技能的基础配置数据,技能上次释放时间等信息,用于生成skillAction对象。而skillAction对象根据时间线执行,最终在目标上产生技能效果。

    战斗单元释放技能变成一个技能Action,技能Action可以分成:开始、吟唱、出手、飞行、生效、结束。具体每一阶段的持续时间由配置表控制,每一阶段的持续时间与前端播放动作时间一致,后端在每一阶段开始会发消息给前端告知技能所处阶段以及持续时间等信息,然后前端根据所处阶段播放对应的动作。

    如果是技能是远程射出子弹,出手阶段结束,生成子弹飞行,可以叫子弹阶段,根据时间间隔采点,检查碰撞生效,子弹消失,进入结束阶段,整个技能Action结束。

 

skill类

class skill
{
public:
	skill(const cSkillCfg* _cfg, unsigned int _skillId, unsigned short _skillLv);
	virtual ~skill() {}
	//使用技能是检查技能的CD 时间精确到毫秒
	bool checkSkillCD(unsigned long long currentTm) const;
	//使用技能是的一些操作,比如记录此次释放技能的时间
	void onUseSkill(unsigned long long currentTm);
	//根据需要添加一些处理函数
public:
	const cSkillCfg* cfg;//关于技能的配置信息
	unsigned int skillId;//技能ID
	unsigned short skillLv;//技能等级
	unsigned long long lastUseTime;//上次释放技能的时间用于计算CD
};

skillManger 管理战斗单元的技能

class skillManager
{
public:
	skillManager(FightUnit* _owner);
	virtual ~skillManager();
	//战斗开始先根据战斗单元数据,初始化技能表,并将生成的技能存skills表中
	void setup();
	//取出要释放的技能,进行操作
	skill* getSkill(unsigned short skillIndex);
	//管理战斗单元的所有技能,根据需求添加逻辑
public:
	FightUnit* owner;//所属战斗单元
	std::vector<skill*> skillList;//技能列表
};

    技能释放根据skill生成skillAction处理技能的具体生效情况

class skillAction
{
public:
	skillAction(fightScene* _scene, skill* _skill, fightUnit* _fighter);//传入战斗场景的指针,战斗技能,技能释放者
	virtual ~skillAction() {}
	void doSkillOnTimer(unsigned long long currentTm);//在战斗主循环中调用,每次调用到,根据时间检查所处阶段,以及结束时间,推进技能逻辑
	//与战斗效果相关函数处理,根据技能效果编号定义一组技能生效基础函数,将函数指针存存入列表,根据效果编号调用
public:
	fightScene* scene;
	skill* s;
	fightUnit* fighter;
	eSkillActionStage skillStage; //当前所处阶段(开始、吟唱、出手、飞行、生效、结束)
	unsigned long long stageEndTime; //当前阶段结束时间
}

    技能在生效的效果有一到多个,通过组合形成不同技能,也需要实现一些基础的技能机制效果,组合形成不同的技能。一个技能在造成伤害的同时可以给目标加一个debug,这个技能就有两个基础技能机制效果组成,技能伤害+添加buff。这样我们只需要实现基础的技能效果机制,将不同的技能机制效果的实现函数的指针存放在数组中,根据技能机制效果编号调用函数,实现技能效果。

    

猜你喜欢

转载自blog.csdn.net/qq_19825249/article/details/108327033
今日推荐