一、前言
前面几节好像与我们一开始说的游戏不太相关,现在我们正式进入战斗场景的开发。
不过凡事不要心急,要循序渐进,我们先搭建一个能够让角色在上面行走的战斗场景吧。
二、正文
首先精简一下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