• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

mysql 搞代码 4年前 (2022-01-09) 20次浏览 已收录 0个评论

下面的设计稍微繁琐一些,有必要把思路说清楚。 下一步的主要实现当我们点击Go按钮后,得到骰子随机数,就是行走的步数,根据步数获取行走的路径,然后角色根据路径移动位置。大体流程如图所示: 这其中getPath()获取路径的方法有必要说清楚,还是看流程图

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

下一步的主要实现当我们点击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(){ …………………..<mark>来源gaodaimacom搞#^代%!码网</mark>	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 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.gaodaima.com/detail/lideguo1979/8276135

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

未完待续


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址