Cocos2d-x 3.2 大富翁游戏项目开发-第十六部分 相连地块缴纳过路费

Cocos2d-x 3.2 大富翁游戏项目开发-第十六部分 相连地块缴纳过路费,第1张

概述当走到其他角色的地块时,根据当前地块是否连片,连片的话统一计算需要缴纳的过路费,连片的计算方式,是各个地块过路费总和。 首先获取当前行走角色路过的地块的x y坐标(Land layer层的坐标),然后获取角色的坐标(GL的坐标,需要转换成map中的坐标), 然后对这2个坐标值进行横向和纵向比较。 如图A位置:以寻找左边地块的方法为例分析 1、 把角色A坐标转换成map中的坐标 2、 把当前0号地块

当走到其他角色的地块时,根据当前地块是否连片,连片的话统一计算需要缴纳的过路费,连片的计算方式,是各个地块过路费总和。

首先获取当前行走角色路过的地块的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,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,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,player2,player1_building_1_tiledID,player1_building_2_tiledID,player1_building_3_tiledID);					refreshMoneyLabel(landOwner,money + retMoney);					refreshMoneyLabel(player2,MSG_PICKONE_TOGO_TAG));					break;				}							}}



点击下载代码

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


未完待续..................

总结

以上是内存溢出为你收集整理的Cocos2d-x 3.2 大富翁游戏项目开发-第十六部分 相连地块缴纳过路费全部内容,希望文章能够帮你解决Cocos2d-x 3.2 大富翁游戏项目开发-第十六部分 相连地块缴纳过路费所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/web/1028798.html

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

发表评论

登录后才能评论

评论列表(0条)

保存