cocos2dx3.2开发 RPG《Flighting》(五)只能行走的战斗场景

本文介绍了使用cocos2dx3.2开发RPG游戏战斗场景时,如何让角色实现行走功能。通过讲解Role类的简化和GameScene的设置,阐述了二级指针在处理角色移动及目标检测中的作用,以及触摸事件的处理。行走功能主要由update函数和move、stand两个辅助函数完成,实现了角色动画的切换。
摘要由CSDN通过智能技术生成

一、前言

前面几节好像与我们一开始说的游戏不太相关,现在我们正式进入战斗场景的开发。

不过凡事不要心急,要循序渐进,我们先搭建一个能够让角色在上面行走的战斗场景吧。


二、正文

首先精简一下Role类,让他能够实现移动功能就好了。

顾名思义,role就是角色,在战斗场景出现的一个一个人都是一个role,废话不多说,直接贴上经过精简过得Role头文件

class Role : public Node{
public:
	Role();
/*create 之前,请先确认已经将文件添加到ArmatureManager*/
	static Role* create(const std::string& name,FlightLayer* layer);
	virtual bool init(const std::string& name,FlightLayer* layer);
	void setControlable(bool b);
	virtual Rect getBoundingBox();
	virtual inline void setArmOffsetX(int x){m_arm_offsetX = x;}
	virtual inline void setArmOffsetY(int y){m_arm_offsetY = y;}

protected:
/*update相关的*/
	virtual void update(float delta);
	virtual void update_pos();

/*从RoleProtocol中继承下来的方法*/
public:

	virtual bool onTouchBegan(Touch* touch,Event* event);
	virtual void onTouchMoved(Touch* touch,Event* event);
	virtual void onTouchEnded(Touch* touch,Event* event);


protected:
	/*与显示相关的*/
	bool m_controlable;
	Armature* m_arm;
	int m_arm_offsetX;
	int m_arm_offsetY;

	bool m_armFaceTo;	//朝向,默认为true,向左


public:
	/*外部调用接口*/
	virtual inline void setDesPoint(const Point& p){m_desPoint = p;}

	//ID
	virtual inline int getId(){return m_id;}
	
	
protected:
	/*与战斗相关的数据*/
	int m_id;	//id

	Point m_desPoint;//目标位置


	int m_speed;	//移动速度
	int m_initSpeed;

};
#endif
经过精简后,Role类就剩下这些函数和变量了,现在的这个Role类只能简单的移动。不要心急,那我们就先实现role的移动吧。


好的,先撇开我们精简过得Role类,先看我们的GameScene

GameScene.h

class GameScene : public Scene{
public:
	CREATE_FUNC(GameScene);
	void setHeroTeam(const HeroMessage& h1,const HeroMessage& h2,const HeroMessage& h3);
	void setMonsterDeq(deque<MonsterMessage> deq);
private:
	virtual bool init();
	FlightLayer* layer;
};

GameScene的两个接口setHeroTeam和setMonsterDeq在上一节的选人界面已经使用过了。

void GameScene::setHeroTeam(const HeroMessage& h1,const HeroMessage& h2,const HeroMessage& h3){
	layer->initTeam(h1,h2,h3);
}

void GameScene::setMonsterDeq(deque<MonsterMessage> deq){
	layer->initMonsterDeq(deq);
}

GameScene也只是简单地将信息传递给layer层罢了。


下面主要研究FlightLayer

class Role;

typedef Role** Role_Ptr;
class FlightLayer : public Layer{
friend class Role;
/*外部提供接口*/
public:
	virtual bool init();
	CREATE_FUNC(FlightLayer);
	void addRole(Role* r);
	std::list<Role_Ptr> getRolesArray(){return m_rolesArray;}

	void initTeam(const HeroMessage& h1,const Hero
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值