Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3

来源:未知 责任编辑:责任编辑 发表时间:2015-09-09 15:29 点击:

新建一个类RouteNavigation,定义getPath()方法,用来获取角色路径,我们采用单例模式设计该类,先看该类的定义

 

RouteNavigation.h


class RouteNavigation{
public:
	static RouteNavigation* routeNav_Instance;  //该类静态对象
	static RouteNavigation* getInstance();//获取静态对象方法
	void getPath(Sprite* playerSprite,int stepsCount,bool** canPassGrid,int gridRowsCount,int gridColsCount);//定义获取路径的方法
	
protected:
	 RouteNavigation(void);
	~RouteNavigation(void);
	
};

RouteNavigation.cpp

RouteNavigation::~RouteNavigation(void)
{
	routeNav_Instance = NULL; 
}

RouteNavigation* RouteNavigation::getInstance()
{
	if(!routeNav_Instance)
	{  
        routeNav_Instance = new RouteNavigation();  
    }  
    return routeNav_Instance;  

 

定义好类后,开始实现getPath()方法,还记得前面的getPath流程图吧 我就按前面的流程开始编写该方法

 

参数说明:
playerSprite:要获取路径的角色,就是哪个角色调用getPath方法 ,就把自己传进来
stepsCount: 角色要走多少步
canPassGrid:关卡地图能否走动的二维数组
gridRowsCount:canPassGrid数组的行数
gridColsCount:canPassGrid数组的列数

void RouteNavigation::getPath(Sprite* playerSprite,int stepsCount,bool** canPassGrid,int gridRowsCount,int gridColsCount)
{
	//定义的vector一维数组,用来存放获得的路径行列  我们先清空一下
	pathCols_vector.clear();
	pathRow_vector.clear();
	//定义的角色当前的所在行列,下一步所处的行列
   	 int nextCol, nextRow;
	int currentCol,currentRow;
	//获取角色当前所处位置的坐标值
	float x = playerSprite->getPositionX();
	float y = playerSprite->getPositionY();
	//根据角色当前的坐标值 给角色开始的行列变量赋值。就是坐标除以每行列的宽高值
	currentCol = x/tiledHeight;
	//我们为了让角色居中显示,曾经在GameBaseScene:: addPlayer()的方法中,给角色纵向位置+ tiledHeight,此处要减掉,才能得到正确行数
	currentRow = (y - tiledWidth)/tiledWidth;

	//定义canPassGrid_copy,接收传过来的canPassGrid二维数组里的值
	bool** canPassGrid_copy  = new  bool*[gridRowsCount];  
	for(int row = 0;row direction_4;

	//建立canPassDirVector_temp存放当前位置上下左右可以通过的位置
	std::vector canPassDirVector_temp;

	int hasGoneNumber  = 0;
	//开始循环查找每一步的能走的行列值
	while (hasGoneNumber(direction_4).swap(direction_4);
	std::vector(canPassDirVector_temp).swap(canPassDirVector_temp);

}


 

 

看一下isCanGoByColRow()方法是如何判断当前位置上下左右是否可通过的。 
逻辑很简单,就是根据传进来的方向,判断二维数组canPassGrid相应行列是否是true,如果true,表示可以通过

bool RouteNavigation::isCanGoByColRow(int row,int col,int direction,bool** canPassGrid)
{
	switch(direction)

	{
		case GO_UP:
			{
				return canPassGrid[row -1][col];
			}
		case GO_DOWN:
			{
				return canPassGrid[row +1][col];
			}
		case GO_LEFT:
			{
				return canPassGrid[row][col -1];
			}
		case GO_RIGHT:
			{
				return canPassGrid[row][col +1];
			}
	}
       
        return false;

	
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • cocos2d-x学习笔记(19)--label 、label atlas
  • cocos2d-x学习笔记(23)--地图的使用3--CCTMXLayer
  • Cocos2d-x 2.0 之 Actions “三板斧” 之一
  • Cocos2d-x学习(一):HelloWorld
  • cocos2d-x学习笔记(18)--游戏打包(windows平台)
  • cocos2d 设置屏幕默认方向
  • cocos2d-x学习笔记(16)--spritesheet(精灵表单)
  • cocos2d-x学习笔记(15)--地图的使用(TMX)
  • cocos2dx在xcode下开发,编译到android上(2)
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1