下面的设计稍微繁琐一些,有必要把思路说清楚。
下一步的主要实现当我们点击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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)