Cocos2d-x 3.2 大富翁游戏项目开发-第十六部分 相连地块缴纳过路费
来源:互联网 发布:摩托罗拉对讲v8软件 编辑:程序博客网 时间:2024/05/01 02:35
当走到其他角色的地块时,根据当前地块是否连片,连片的话统一计算需要缴纳的过路费,连片的计算方式,是各个地块过路费总和。
首先获取当前行走角色路过的地块的x y坐标(Land layer层的坐标),然后获取角色的坐标(GL的坐标,需要转换成map中的坐标),
然后对这2个坐标值进行横向和纵向比较。
如图A位置:以寻找左边地块的方法为例分析
1、 把角色A坐标转换成map中的坐标
2、 把当前0号地块的sprite对象放入容器中,以便后面播放淡入淡出的动画
3、 0号地块x坐标同角色A的map坐标的x值是否相等,如果相等表示当前角色的上边或下边有对方的地块。
4、 取得0号地块左边相邻1号的坐标
5、 取得1号地块的GID值
6、 判断1号地块的GID值
7、 根据1号地块的GID等级,把过路费相加
8、 把1号地块sprite放入容器中
9、 继续查找左边相邻2号地块,处理方法同1号地块
10、如果左边没有地块了,退出寻找左边地块的循环,继续寻找右边地块
void GameBaseScene::payTolls(int payTag,float x,float y ,int playerTag)调用到displayArea方法先说明一下参数float x:表示在land Layer层中地块的横坐标值float y:表示在land Layer层中地块的纵坐标值RicherPlayer* player:当前行走的角色int building_1_tiledID:路过的地块1等级int building_2_tiledID:路过的地块2等级int building_3_tiledID:路过的地块3等级返回值表示除了当前地块的其他连片地块的过路费总和int GameBaseScene::displayArea(float x,float y,RicherPlayer* player,int building_1_tiledID,int building_2_tiledID,int building_3_tiledID){int sumMoney =0;//过路费总和初始值float retX = Util::GL2map(player->getPosition(),_map).x; //把角色坐标转换成map中的坐标if(x == retX) //比较map坐标的x值是否相等,如果相等表示当前角色的上边或下边有对方的地块。{float leftX = x - 1; //当前地块相邻左边的坐标float rightX = x + 1; //当前地块相邻右边的坐标int leftGID = landLayer->getTileGIDAt(ccp(leftX,y));//取得相邻左边地块的GID值int rightGID = landLayer->getTileGIDAt(ccp(rightX,y));//取得相邻右边地块的GID值displayVector.pushBack(landLayer->getTileAt(ccp(x,y))); //把当前地块的sprite对象放入容器中,以便后面播放淡入淡出的动画while(leftGID != 0 && (leftGID == building_1_tiledID || leftGID == building_2_tiledID || leftGID == building_3_tiledID))//判断相邻左边地块的GID{if(leftGID == building_1_tiledID)//如果相邻左边地块的GID是等级1的地块,把过路费相加{sumMoney += LAND_BLANK_MONEY;}if(leftGID == building_2_tiledID)//如果相邻左边地块的GID是等级2的地块,把过路费相加{sumMoney += LAND_LEVEL_1_MONEY;}if(leftGID == building_3_tiledID)//如果相邻左边地块的GID是等级3的地块,把过路费相加{sumMoney += LAND_LEVEL_2_MONEY;}displayVector.pushBack(landLayer->getTileAt(ccp(leftX,y))); //把相邻左边的地块sprite放入容器中leftX -= 1;//继续查找相邻左边地块leftGID = landLayer->getTileGIDAt(ccp(leftX,y));//取得地块GID值if(leftGID == 0)//如果左边没有地块了,退出寻找左边地块的循环{break;}log("leftGID: %d" ,leftGID);}while(rightGID != 0 && (rightGID == building_1_tiledID || rightGID == building_2_tiledID || rightGID == building_3_tiledID))//判断相邻右边地块的GID{if(rightGID == building_1_tiledID)//如果相邻右边地块的GID是等级1的地块,把过路费相加{sumMoney += LAND_BLANK_MONEY;}if(rightGID == building_2_tiledID)//如果相邻右边地块的GID是等级2的地块,把过路费相加{sumMoney += LAND_LEVEL_1_MONEY;}if(rightGID == building_3_tiledID)//如果相邻右边地块的GID是等级3的地块,把过路费相加{sumMoney += LAND_LEVEL_2_MONEY;}displayVector.pushBack(landLayer->getTileAt(ccp(rightX,y)));//把相邻右边的地块sprite放入容器中rightX += 1;//继续查找相邻右边地块rightGID = landLayer->getTileGIDAt(ccp(rightX,y));//取得地块GID值if(rightGID == 0)//如果右边没有地块了,退出寻找右边地块的循环{break;}log("rightGID: %d" ,rightGID);}}//上下寻找地块的方法同左右逻辑一样,不再累述。........................//播放容器中sprite的动画,效果就是相邻的地块淡入淡出for(auto it=displayVector.begin();it!=displayVector.end();it++ ){(Sprite*)(*it)->runAction(Sequence::create(landFadeOut->clone(),landFadeIn->clone(),NULL));}return sumMoney;}void GameBaseScene::payTolls(int payTag,float x,float y ,int playerTag){int money =0; if(payTag == MSG_PAY_TOLLS_1_TAG){money = LAND_BLANK_MONEY;} if(payTag == MSG_PAY_TOLLS_2_TAG){money = LAND_LEVEL_1_MONEY;}if(payTag == MSG_PAY_TOLLS_3_TAG){money = LAND_LEVEL_2_MONEY;}//先把容器清空一下displayVector.clear();RicherPlayer* landOwner = getPlayerByTiled(buy_land_x,buy_land_y);switch(playerTag){case PLAYER_1_TAG:{//取得地块过路费总和int retMoney = displayArea(x,y,player1,player2_building_1_tiledID,player2_building_2_tiledID,player2_building_3_tiledID);//更新角色相应的资金refreshMoneyLabel(landOwner,money + retMoney);refreshMoneyLabel(player1,-(money + retMoney));NotificationCenter::getInstance()->postNotification(MSG_PICKONE_TOGO,String::createWithFormat("%d",MSG_PICKONE_TOGO_TAG));break;}case PLAYER_2_TAG:{int retMoney = displayArea(x,y,player2,player1_building_1_tiledID,player1_building_2_tiledID,player1_building_3_tiledID);refreshMoneyLabel(landOwner,money + retMoney);refreshMoneyLabel(player2,-(money + retMoney));NotificationCenter::getInstance()->postNotification(MSG_PICKONE_TOGO,String::createWithFormat("%d",MSG_PICKONE_TOGO_TAG));break;}}}
点击下载代码
http://download.csdn.net/detail/lideguo1979/8330609
未完待续..................
0 0
- Cocos2d-x 3.2 大富翁游戏项目开发-第十六部分 相连地块缴纳过路费
- Cocos2d-x 3.2 大富翁游戏项目开发-第十五部分 升级地块
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十五部分 大富翁股市
- Cocos2d-x 3.2 大富翁游戏项目开发
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十八部分 游戏保存和载入存档游戏
- Cocos2d-x 3.2 大富翁游戏项目开发-第九部分 代码部分优化
- Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-关卡选择ScrollView
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十七部分 技能提升和游戏结束判断
- Cocos2d-x 3.2 大富翁游戏项目开发-第二十九部分 游戏配音
- Cocos2d-x 3.2 大富翁游戏项目开发-第三十部分 项目移植
- Cocos2d-x 3.2 大富翁游戏项目开发-第二部分片头动画
- Cocos2d-x 3.2 大富翁游戏项目开发-第三部分 菜单场景
- Cocos2d-x 3.2 大富翁游戏项目开发-第四部分 退出对话框
- Cocos2d-x 3.2 大富翁游戏项目开发-第六部分 地图设计
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_1
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_2
- Cocos2d-x 3.2 大富翁游戏项目开发-第七部分 获取角色路径_3
- Cocos2d-x 3.2 大富翁游戏项目开发-第八部分 角色按路径行走
- windows下面apache和php配置
- 丝路基金:“一带一路”的加速器
- 培养高职学生英语口语能力的具体对策
- thinkphp实现动态下拉菜单(补充 设置默认值)
- .cn域名大量被搞怎么办?
- Cocos2d-x 3.2 大富翁游戏项目开发-第十六部分 相连地块缴纳过路费
- 前进后退视图的实现
- 前后端分离的思考与实践(一)
- shell tips
- HDU 2648 Shopping
- archive validationg failed with errors error description not available 上传不成功包解决办法 那么问题来了
- 一个简单粗暴的前后端分离方案
- codeblocks 中出现no debugging symbols的问题
- UTF-8 到UTF -16 转换C程序