加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 20:03:10 所属栏目:百科 来源:网络整理
导读:一、前言 先补充一下,英雄的死亡 英雄的死亡,我们要在FlightLayer对m_rolesArray进行清除操作 void FlightLayer::cleanNullPtrInArray(){auto it = m_rolesArray.begin();while(it != m_rolesArray.end()){if((**it)-getRoleStat() == Role::ROLE_DIE){(**

一、前言

先补充一下,英雄的死亡

英雄的死亡,我们要在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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读