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

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

概述下面的设计稍微繁琐一些,有必要把思路说清楚。 下一步的主要实现当我们点击Go按钮后,得到骰子随机数,就是行走的步数,根据步数获取行走的路径,然后角色根据路径移动位置。大体流程如图所示: 这其中getPath()获取路径的方法有必要说清楚,还是看流程图吧 思路大体是这样的,代码实现上可能存在一些差别,但是不影响我们的整体设计思想。 我们开始修改GameBaseScene代码 GameBaseScen

下面的设计稍微繁琐一些,有必要把思路说清楚。

下一步的主要实现当我们点击Go按钮后,得到骰子随机数,就是行走的步数,根据步数获取行走的路径,然后角色根据路径移动位置。大体流程如图所示:



这其中getPath()获取路径的方法有必要说清楚,还是看流程图吧




思路大体是这样的,代码实现上可能存在一些差别,但是不影响我们的整体设计思想。


我们开始修改GameBaseScene代码


GameBaseScene.h //新添加变量 表示地图块中每块的宽高const int tileDWIDth = 32; const int tiledHeight = 32;class GameBaseScene: public Layer{public:	int tiledColsCount; //关卡地图总的列数	int tiledRowsCount;//关卡地图总的行数	bool** canPassGrID;//根据地图总的行列数创建的二维数组	virtual voID initTiledGrID();//用来初始化canPassGrID数组	voID setWayPasstoGrID();//根据地图图层way,设置canPassGrID相应的值为true	voID onExit();//退出时需要释放某些变量空间		voID addGobutton();//添加GO 按钮};


修改GameBaseScene.cpp文件


在init方法中添加新增函数的调用bool GameBaseScene::init(){ …………………..	addGobutton();	initTiledGrID();	setWayPasstoGrID();…………….}voID  GameBaseScene::setWayPasstoGrID(){	TMXLayer* wayLayer = _map->layernamed("way");//获取地图way图层	Size _mapSize = wayLayer->getLayerSize(); //获取way图层大小              //根据way图层,获取道路的坐标并转换成地图的行列值,设置canPassGrID相应的行列值为true,表示人物可以从这里通过               for (int j = 0;  j < _mapSize.wIDth; j++) {  		for (int i = 0;  i < _mapSize.height; i++) {                                      Sprite* _sp = wayLayer->tileAt(Point(j,i));                                       if (_sp) 			{                                                              float x = _sp->getpositionX();				float y = _sp->getpositionY();				int col = x/tileDWIDth;				int row = y/tiledHeight;				canPassGrID[row][col] = true;				log("canPassGrID row=  %d,col =%d,canpass = %d",row,col,canPassGrID[row][col]);            }  			        }      }  	log("setWayPasstoGrID finished");}


//这个就是简单 的添加Go按钮voID  GameBaseScene::addGobutton(){	Sprite* gobutton = Sprite::create(GO_button);	gobutton->setposition(ccp(tableStartposition_x+2*tableWIDth,tableStartposition_y-tableHeight*5));	addChild(gobutton);}//当退出是调用该函数,释放canPassGrID占用的空间voID GameBaseScene::onExit(){		CC_SAFE_DELETE(canPassGrID);	Layer::onExit();}


下面看一下initTiledGrID()方法的实现,由于每个关卡地图大小不一样,所以这个方法的实现放到了子类中

SeaScene.cpp实现如下

SeaScene实现父类GameBaseScene的initTiledGrID方法voID GameBaseScene::initTiledGrID(){	tiledColsCount = 20;//地图总的列数	tiledRowsCount = 15;//地图总的行数	//根据行列数创建二维数组canPassGrID	canPassGrID = new  bool*[tiledRowsCount];  	 for(int i=0;i<tiledRowsCount;i++)               canPassGrID[i]=new bool [tiledColsCount];		 	//给canPassGrID设置默认值为false 表示不能通过	for(int row = 0;row<tiledRowsCount;row++)	{		for(int col = 0;col<tiledColsCount;coL++)		{			canPassGrID[row][col] = false;		}	}	log("");	 }


Ok 至此我们已经可以调试一下代码,从log中可以看到已经打印出了canPassGrID数组中可以通过的行列值了

对比一下sea.tmx文件中的way图层 ,看看行列值是不是一致了



点击下载代码

http://download.csdn.net/detail/lIDeguo1979/8276135


获取路径稍微复杂一些,我们分多章介绍


未完待续

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1全部内容,希望文章能够帮你解决Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存