Cocos2d-x 3.2 大富翁游戏项目开发-第二十一部分 捡到积分卡 恢复体力

跟前面第18部分处理,问号事件一样,角色行走完毕后,还要检查停留问题是否有积分卡,如果有则增加相应的体力值

1、新建Item_strength_up类,该类用来显示角色体力回升的动画。

void Item_strength_up::addItemSpriteFrameCache()
{
	itemSpriteFrameCache = SpriteFrameCache::getInstance();
	itemSpriteFrameCache->addSpriteFramesWithFile("images/strength_up.plist","images/strength_up.png");

	memset(name, 0, 20);

	for (int i=1; i<=14; i++)
	{
		sprintf(name, "strength_up_%02d.png",i);
		item_anim_vector.pushBack(itemSpriteFrameCache->getSpriteFrameByName(name));
	}

}

void Item_strength_up::setItemAnimate()
{
	if(!AnimationCache::getInstance()->getAnimation("strength_up_animation"))
	{
		AnimationCache::getInstance()->addAnimation(Animation::createWithSpriteFrames(item_anim_vector,0.1f),"strength_up_animation");
	}
	 normal_anmi = Animate::create(AnimationCache::getInstance()->getAnimation("strength_up_animation"));
	 normal_anmi->retain();
}

2、在RicherGameController类的handlePropEvent方法中,添加积分卡的判断,如果停留位置有积分卡,则发送增加体力的MSG_STRENGTH_UP消息

void RicherGameController::handlePropEvent()
{
.........
	 if(endId == GameBaseScene::strength_30_tiledID)
	 {
		 String * str = String::createWithFormat("%d-%f-%f-%d",MSG_STRENGTH_UP30_TAG,pointInMap.x,pointInMap.y,_richerPlayer->getTag());
		 NotificationCenter::getInstance()->postNotification(MSG_STRENGTH_UP,str);
		 return;
	 }

	 if(endId == GameBaseScene::strength_50_tiledID)
	 {
		 String * str = String::createWithFormat("%d-%f-%f-%d",MSG_STRENGTH_UP50_TAG,pointInMap.x,pointInMap.y,_richerPlayer->getTag());
		 NotificationCenter::getInstance()->postNotification(MSG_STRENGTH_UP,str);
		 return;
	 }

	 if(endId == GameBaseScene::strength_80_tiledID)
	 {
		 String * str = String::createWithFormat("%d-%f-%f-%d",MSG_STRENGTH_UP80_TAG,pointInMap.x,pointInMap.y,_richerPlayer->getTag());
		 NotificationCenter::getInstance()->postNotification(MSG_STRENGTH_UP,str);
		 return;
	 }

}

3、GameBaseScene中继续注册增加体力值的观察以及处理代码

void GameBaseScene::registerNotificationObserver()
{
.............
	NotificationCenter::getInstance()->addObserver(
		this,
		callfuncO_selector(GameBaseScene::receivedNotificationOMsg),
		MSG_STRENGTH_UP,
		NULL);
}

receivedNotificationOMsg调用doItemStrengthUp方法,来具体处理体力值增加和体力恢复动画的播放
void GameBaseScene::receivedNotificationOMsg(Object* data)
{
.............
	case MSG_STRENGTH_UP30_TAG:
		{
			doItemStrengthUp(MSG_STRENGTH_UP30_TAG, messageVector.at(3)->intValue());
			break;
		}
	case MSG_STRENGTH_UP50_TAG:
		{
			doItemStrengthUp(MSG_STRENGTH_UP50_TAG, messageVector.at(3)->intValue());
			break;
		}
	case MSG_STRENGTH_UP80_TAG:
		{
			doItemStrengthUp(MSG_STRENGTH_UP80_TAG, messageVector.at(3)->intValue());
			break;
		}

}

4、体力动画播放完毕后,调用发送消息 sendMSGDealAroundLand ,来处理角色上下左右相邻地块事件

void GameBaseScene::doItemStrengthUp(int strengthUp,int playerTag)
{
	int strengthValue = 0;
	//根据积分卡值,给strengthValue赋相应值
	switch(strengthUp)
	{
	case MSG_STRENGTH_UP30_TAG:
		{
			strengthValue =30;
			break;
		}

	case MSG_STRENGTH_UP50_TAG:
		{
			strengthValue =50;
			break;
		}

	case MSG_STRENGTH_UP80_TAG:
		{
			strengthValue =80;
			break;
		}

	}
	switch(playerTag)
			{
				case PLAYER_1_TAG:
				{
					//设置item_strength_up在角色的位置可见,播放动画,显示toast。播放完毕设置item_strength_up不可见
					item_strength_up->setVisible(true);
					item_strength_up->setPosition(player1->getPosition()-ccp(5,0));
					Sequence* action = Sequence::create(item_strength_up->getNormal_anmi(),
						CallFunc::create([this](){
						item_strength_up->setVisible(false);
					}
					),NULL);
					item_strength_up->runAction(action);
					CocosToast::createToast(this,
						String::createWithFormat("%s %d",LanguageString::getInstance()->getLanguageString(STRENGTH_UP)->getCString(),strengthValue)->getCString(),
						TOAST_SHOW_TIME,player1->getPosition());
					refreshStrengthLabel(player1,strengthValue);
					scheduleOnce(schedule_selector( GameBaseScene::sendMSGDealAroundLand),3.0f);
					break;
				}
				case PLAYER_2_TAG:
				{
					.............
				}
			}

}

效果如图

点击下载代码

时间: 2024-11-07 17:17:37

Cocos2d-x 3.2 大富翁游戏项目开发-第二十一部分 捡到积分卡 恢复体力的相关文章

Cocos2d-x 3.2 大富翁游戏项目开发-第二部分片头动画

第二部分片头动画 首先在visula studio 下创建新工程 工具类ConstUtil.h,该文件主要定义了一些图片资源.字符串.字体等 #ifndef __CONSTUTIL_H__ #define __CONSTUTIL_H__ //定义了诚迈科技四张图片资源,由于在诚迈科技,就用公司名称做动画吧 #define CHENG_IMAGE "cheng.png" #define MAI_IMAGE "mai.png" #define KE_IMAGE &quo

Cocos2d-x 3.2 大富翁游戏项目开发-第二十五部分 大富翁股市

当角色走到股市图标时,进入股市界面.每走完一个回合,增加一条股票数据, 股市界面上半部分显示股票信息,包括代码,名称,当前价格,买入价格,涨跌百分比,角色持有的股票数量 下半部分显示股票价格走势,当点击一个股票时,显示相关股票的价格走势,共显示最新14条的价格走势. 每次点击购买,买入100股 .点击卖出,则卖出所持有的该股的所有股票.成交价格 等信息动态更新 点击返回,返回到游戏主界面,并更新角色资金值 1.首先添加股票类 包括代码,名称,买入价格,涨跌百分比,持仓数量等定义以及相关的get

Cocos2d-x 3.2 大富翁游戏项目开发-第二十三部分 购买彩票

当角色路过彩票的标志或者停留位置有彩票标志时,弹出购买彩票的对话框,提示购买彩票,已经买过的号码,不显示.当机器对手路过时则直接购买彩票. 1. 在RicherPlayer.h中增加std::vector<int> lottery_vector;用来存储购买的彩票号码 2. RicherGameController 修改endGo方法,每走完一步就会进入该方法,判断是否有彩票标示图标,有的话发送MSG_LOTTERY彩票消息,MOVEPASS标示走完一步的标志 void RicherGameC

Cocos2d-x 3.2 大富翁游戏项目开发-第二十九部分 游戏配音

我从大富翁里提取出来里面的wav音效文件,放到我们的游戏中以增加趣味性,仅供学习研究之用 1.修改AppDelegate.cpp文件 // This function will be called when the app is inactive. When comes a phone call,it's be invoked too void AppDelegate::applicationDidEnterBackground() { Director::getInstance()->stop

Cocos2d-x 3.2 大富翁游戏项目开发-第二十六部分 人物技能

本节主要是添加人物技能,技能包括 暴风骤雨:此技能可以把地块变成空白地块, 随心步:  选择想走的步数,想走几步走几步 巧取豪夺:把对手的土地变成自己的 技能包含的信息:等级 和 耗费体力 等级共5级,每提高一个等级,需要耗费的体力值减10 暴风骤雨:初始耗费体力值70 随心步:  初始耗费体力值50 巧取豪夺:初始耗费体力值100 1.添加技能SkillCard 类,包含了技能基本信息以及如何显示技能 其实现和前面讲解的股票 彩票 card类相似,不再累述 2.修改RicherPlayer类,

Cocos2d-x 3.2 大富翁游戏项目开发-第二十部分 螃蟹挡路

该部分我们添加螃蟹伤人事件,道路位置随机添加螃蟹精灵,当角色行走完毕如果停留位置碰到了螃蟹,首先播放伤人动画,然后是播放救护车把角色带走动画. 如果轮流到该角色行走时,吐司提示住院还有几天,当住院天数到期,该角色才可以继续行走 新建了几个精灵类 Item_crab.cpp 螃蟹 Item_emergency.cpp 救护车 Item_fog.cpp 烟雾 Item_stretcher.cpp 担架 //该方法在场景中添加这几个精灵 void GameBaseScene::initItemSpri

Cocos2d-x 3.2 大富翁游戏项目开发-第二十二部分 拾到珍珠

该部分同前面处理逻辑基本一样,道路上随机出现闪烁的珍珠,在捡到珍珠后,toast显示捡到珍珠资金增加. 1.编写Item_ball类,该类存储了珍珠相关动画 bool Item_ball::init() { addItemSpriteFrameCache(); SpriteFrame* spf; spf = itemSpriteFrameCache->getSpriteFrameByName("ball_01.png"); Sprite::initWithSpriteFrame(

Cocos2d-x 3.2 大富翁游戏项目开发-第二十七部分 技能提升和游戏结束判断

本节主要是增加技能提升事件 和 游戏结束判断,游戏判断简单处理了一下,只要有一个角色资金小于0 ,就认为游戏结束. 如果人物在3个以上,则需要做进一步处理,比如失败方的房屋如何处理,这些在处理到多个角色的时候再做处理. 1.添加提升技能随机事件 oid GameBaseScene::initRandomAskEvent() { ................. randomAskEventMap.insert(STORM_UP_TAG,LanguageString::getInstance()

Cocos2d-x 3.2 大富翁游戏项目开发-第二十四部分 彩票开奖

每隔N个回合,彩票开奖一次,每期开奖奖金固定5万,暂不累积.摇奖效果一般,以后考虑用物理引擎实现 1.定义彩票开奖类 bool LotteryPublish::init() { addItemSpriteFrameCache(); SpriteFrame* spf; spf = itemSpriteFrameCache->getSpriteFrameByName("publish_ly01.png"); Sprite::initWithSpriteFrame(spf); setI