cocos2dx3.2开发 RPG《Flighting》(十一)角色分类——英雄与怪物

cocos2dx3.2开发 RPG《Flighting》(十一)角色分类——英雄与怪物,第1张

概述一、前言 先补充一下,英雄的死亡 英雄的死亡,我们要在FlightLayer对m_rolesArray进行清除 *** 作 void FlightLayer::cleanNullPtrInArray(){ auto it = m_rolesArray.begin(); while(it != m_rolesArray.end()){ if((**it)->getRoleStat() == Role

一、前言

先补充一下,英雄的死亡

英雄的死亡,我们要在FlightLayer对m_rolesArray进行清除 *** 作

voID FlightLayer::cleanNullPtrInArray(){	auto it = m_rolesArray.begin();	while(it != m_rolesArray.end()){		if((**it)->getRoleStat() == Role::RolE_DIE){			(**it)->removeFromParentAndCleanup(true);			**it = nullptr;			it = m_rolesArray.erase(it);		}else{			++it;		}	}}<strong></strong>

好了,前面我们讲得移动,攻击,都是对角色类来讲的。现在为了开展后面的,我们是时候对角色分成两类了,英雄和怪物


二、正文

英雄类Hero继承Role类,与Role相比,不同的地方就是Hero能够使用技能,而且有技能效果,还有initWithMessage方法就是用HeroMessage来初始化自身的一些属性罢了。

class Hero : public Role{frIEnd class Skill;public:		static Hero* create(const std::string& name,FlightLayer* layer);	static Hero* create(const std::string& name,FlightLayer* layer,int offsetX,int offsetY);	voID initHero();	voID initWithMessage(const HeroMessage& msg);		virtual Point getHpSlIDerPos();		inline voID setSkill(SkillMessage s){m_skill = s;}	inline SkillMessage getSkill(){return m_skill;}		virtual voID skill();		voID runStateEffect(int ID);	//是否在大招状态	inline bool isSkilling(){return skilling;}	//是否能使用大招	inline bool isCanSkill(){return canUseSkill;}	//恢复状态	voID recover();private:	virtual voID update(float dt);	voID update_state(float dt);	voID update_skill_cd(float dt);private:	SkillMessage m_skill;	bool skilling;	bool canUseSkill;		float m_state_lastTime;	float skillCD;	Sprite* m_state_sprite;};
关于技能和技能效果不打算在这里开展。以后会单独有一节。

怪物类Monster也是继承Role类,与Role相比,Monster有一个仇恨值数组,管理对攻击过自己的英雄的仇恨值,默认攻击仇恨值最高的那个英雄,当怪物在没有攻击对象的时候,会自动随机抽取一个英雄攻击。

既然我们已经有了分类,那么为了逻辑判断 *** 作容易点(例如英雄不能打英雄,怪物不能打怪物之类的),我们可以在父类(Role)增加一个枚举和一个标识是什么角色类型的变量,如下

class Role{public:enum RolE_TYPE{		RolE_TYPE_NulL,RolE_TYPE_HERO,RolE_TYPE_MONSTER	};private:	RolE_TYPE m_type;//角色类型:Monster Or Hero}voID Hero::initHero(){	setControlable(true);	m_type = Role::RolE_TYPE_HERO;}voID Monster::initMonster(){	m_type = Role::RolE_TYPE_MONSTER;	m_controlable = false;//怪物不可控制}

大概分类就是这样子吧。


我的csdn地址:http://blog.csdn.net/hezijian22

邮箱地址:578690286@qq.com

如有问题或指教,欢迎与我交流,谢谢。

总结

以上是内存溢出为你收集整理的cocos2dx3.2开发 RPG《Flighting》(十一)角色分类——英雄与怪物全部内容,希望文章能够帮你解决cocos2dx3.2开发 RPG《Flighting》(十一)角色分类——英雄与怪物所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1031082.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存