分析Cocos2d-x横版ACT手游源代码 4、场景

分析Cocos2d-x横版ACT手游源代码 4、场景,第1张

概述.h文件 #ifndef _CM_GAME_SCENE_H_#define _CM_GAME_SCENE_H_#include "../publicdef/PublicDef.h"#include "../gameunit/person/NFEnemy.h"using namespace gui;class CNFGameScene : public cocos2d::CCLayer
.h文件
#ifndef _CM_GAME_SCENE_H_#define _CM_GAME_SCENE_H_#include "../publicdef/PublicDef.h"#include "../gameunit/person/NFEnemy.h"using namespace gui;class CNFGameScene : public cocos2d::cclayer,public CMSgReceiver{protected:	//==============================================================================临时对应win32	bool m_bIsPressW;						//win32下对应的键盘按键是否被按下(临时)	bool m_bIsPressA;						//win32下对应的键盘按键是否被按下(临时)	bool m_bIsPressS;						//win32下对应的键盘按键是否被按下(临时)	bool m_bIsPressD;						//win32下对应的键盘按键是否被按下(临时)	bool m_bIsPressJ;						//win32下对应的键盘按键是否被按下(临时)	bool m_bIsPressK;						//win32下对应的键盘按键是否被按下(临时)	bool m_bIsPressL;						//win32下对应的键盘按键是否被按下(临时)	bool m_bIsPressI;						//win32下对应的键盘按键是否被按下(临时)	int m_nRunSpace;						//连续按方向键使奔跑的时间间隔	float m_fFirectionold;					//上一次移动方向	bool m_bIsRun;							//是否处于奔跑状态	//==============================================================================临时对应win32 end	float		m_fNowHPProgress2;			//当前Hp2的百分比	float		m_fNowEnemyHpProgress2;		//当前敌人Hp2的百分比	CNFEnemy	* m_pTargetEnemy;			//被击中的目标敌人	int			m_nEnemyBloodVisibleTime;	//敌人血条显示时间(帧)	int			m_nEnemyBloodVisibleTimeTemp;//当前敌人血条显示时间(帧)	int			m_nHitNum;					//连击数	int			m_nHitTime;					//连击间隔时间	int			m_nHitTimeTemp;				//当前连击时间	int			m_nProgonistLevel;			//角色等级	float		m_fProgonistExp;			//角色经验	float		m_fProgonistExpLevel;		//角色升级所需经验	bool		m_bBtnListSwitch;				//下方按钮列表开关	bool		m_bBtnListSwitchMoveOver;		//下方按钮列表动画结束标识	int			m_nStageID;					//战场ID	int			m_nRoleID;					//角色IDpublic:	//create	static cocos2d::CCScene* CreateGameScene(int nStageID,int nRoleID);	static CNFGameScene * CreateLayer(int nStageID,int nRoleID);protected:	//init    virtual bool Init(int nStageID,int nRoleID);     	//更新函数	voID OnCallPerFrame(float dt);	//触摸	virtual bool cctouchBegan(CCtouch *ptouch,CCEvent *pEvent);	virtual voID cctouchmoved(CCtouch *ptouch,CCEvent *pEvent);	virtual voID cctouchended(CCtouch *ptouch,CCEvent *pEvent);	virtual voID cctouchCancelled(CCtouch *ptouch,CCEvent *pEvent);	//	virtual voID onEnter();    virtual voID onExit();	//接收函数	virtual voID ReCMSg(int enMsg,voID* pData,int nSize);	//动作回调:连击结果结束	voID OnHitResultOverCallBack();	//显示连击结果	voID ShowHitResult();	//消息处理:游戏胜利	bool OnSubMsgGameWin(voID *pInfo,int nSize);	//消息处理:游戏失败	bool OnSubMsgGameOver(voID *pInfo,int nSize);	//按钮回调	voID OnBtnCallBack(CCObject *pObj);	//回城按钮回调		voID OnReturnToTownClick(CCObject* pSender,touchEventType type);			protected:	//标签	enum 	{		enTag3D = 100,enTagRocker,enTagHPProgress2,enTagHPProgress1,enTagMPProgressChakela2,enTagMPProgressChakela1,enTagHPEnemyProgress2,enTagHPEnemyProgress1,enTagHPEnemyProgressBg,enTagHitNum,enTagHitResult,enTagMenu,enTagBtnProAICtrl,enTagBtnBackToTown,enTagLevel,enTagExpPro,enTagGameWinLayer,enMsgGameOverLayer,};};#endif

.cpp文件

#include "NFGameScene.h"#include "NFRocker.h"#include "NF3DWorldLayer.h"#include "../gameunit/person/NFProtagonist.h"#include "../tiledmap/NFTMXTiledMap.h"#include "../datamanager/NFDataManager.h"#include "../ui/NFTownScene.h"#define _NF_RUNSPACE_	7CCScene* CNFGameScene::CreateGameScene(int nStageID,int nRoleID){	do 	{		//建立场景		CCScene* pScene = CCScene::create();		CC_BREAK_IF(pScene==NulL);		//建立层		CNFGameScene* pLayer = CNFGameScene::CreateLayer(nStageID,nRoleID);		CC_BREAK_IF(pLayer==NulL);		//将层加入场景		pScene->addChild(pLayer);		return pScene;	} while (false);	cclog("Fun GameScene::CreateScene Error!");	return NulL;}CNFGameScene * CNFGameScene::CreateLayer(int nStageID,int nRoleID){	CNFGameScene *pRet = new CNFGameScene(); 	if (pRet && pRet->Init(nStageID,nRoleID)) 	{ 		pRet->autorelease(); 		return pRet; 	} 	delete pRet; 	pRet = NulL; 	return NulL; 	}bool CNFGameScene::Init(int nStageID,int nRoleID){	do 	{		//srand((unsigned)time(NulL));		//初始化父类		CC_BREAK_IF(cclayer::init()==false);		m_nStageID = nStageID;		m_nRoleID = nRoleID;		//键盘		m_bIsPressW = false;		m_bIsPressA = false;		m_bIsPressS = false;		m_bIsPressD = false;		m_bIsPressJ = false;		m_bIsPressK = false;		m_bIsPressL = false;		m_bIsPressI = false;		m_nRunSpace = _NF_RUNSPACE_;		m_fFirectionold = -1;		m_bIsRun = false;		m_nHitNum = 0;					//连击数		m_nHitTime = 60;				//连击间隔时间		m_nHitTimeTemp = -1;			//当前连击时间		m_bBtnListSwitchMoveOver=true;		m_bBtnListSwitch=false;		//创建3D世界		CNF3DWorldLayer * pLayer = CNF3DWorldLayer::CreateLayer(m_nStageID,m_nRoleID);		CC_BREAK_IF(pLayer==NulL);		pLayer->SetMsg(this);		addChild(pLayer,enZOrderBack,enTag3D);		//创建摇杆		CNFRockerLayer * pRocker = CNFRockerLayer::CreateLayer(pLayer,m_nStageID);		CC_BREAK_IF(pRocker==NulL);		addChild(pRocker,enZOrderFront,enTagRocker);		//创建血条背景		CCSprite * pBloodBG = CCSprite::create("gameui/bg_status.png");		CC_BREAK_IF(pBloodBG==NulL);		pBloodBG->setposition(ccp(175,SCREEN_HEIGHT-55));		addChild(pBloodBG,enZOrderMID);		//创建主角血条		CCSprite* pSpr2 = CCSprite::create("gameui/value_hp.png");		CC_BREAK_IF(pSpr2==NulL);		CCProgresstimer* pProgress2 = CCProgresstimer::create(pSpr2);		CC_BREAK_IF(pProgress2==NulL);		pProgress2->setType(kCCProgresstimerTypebar);		pProgress2->setMIDpoint(ccp(0.f,0.f));		pProgress2->setbarChangeRate(ccp(1.f,0.f));		pProgress2->setPercentage(100.f);		pProgress2->setposition(ccp(pBloodBG->getpositionX()+15,pBloodBG->getpositionY()+18));		this->addChild(pProgress2,enTagHPProgress2);		pProgress2->setopacity(150.f);		CCSprite* pSpr1 = CCSprite::create("gameui/value_hp.png");		CC_BREAK_IF(pSpr1==NulL);		CCProgresstimer* pProgress1 = CCProgresstimer::create(pSpr1);		CC_BREAK_IF(pProgress1==NulL);		pProgress1->setType(kCCProgresstimerTypebar);		pProgress1->setMIDpoint(ccp(0.f,0.f));		pProgress1->setbarChangeRate(ccp(1.f,0.f));		pProgress1->setPercentage(100.f);		pProgress1->setposition(pProgress2->getposition());		this->addChild(pProgress1,enTagHPProgress1);		//创建主角查克拉		CCSprite* pSprChakela2 = CCSprite::create("gameui/value_magic.png");		CC_BREAK_IF(pSprChakela2==NulL);		CCProgresstimer* pProgressChakela2 = CCProgresstimer::create(pSprChakela2);		CC_BREAK_IF(pProgressChakela2==NulL);		pProgressChakela2->setType(kCCProgresstimerTypebar);		pProgressChakela2->setMIDpoint(ccp(0.f,0.f));		pProgressChakela2->setbarChangeRate(ccp(1.f,0.f));		pProgressChakela2->setPercentage(100.f);		pProgressChakela2->setposition(ccp(pBloodBG->getpositionX()+7,pBloodBG->getpositionY()-1));		this->addChild(pProgressChakela2,enTagMPProgressChakela2);		pProgressChakela2->setopacity(150.f);// 		CCSprite* pSprChakela1 = CCSprite::create("gameui/value_magic.png");// 		CC_BREAK_IF(pSprChakela1==NulL);// 		CCProgresstimer* pProgressChakela1 = CCProgresstimer::create(pSprChakela1);// 		CC_BREAK_IF(pProgressChakela1==NulL);// 		pProgressChakela1->setType(kCCProgresstimerTypebar);// 		pProgressChakela1->setMIDpoint(ccp(0.f,0.f));// 		pProgressChakela1->setbarChangeRate(ccp(1.f,0.f));// 		pProgressChakela1->setPercentage(0.f);// 		pProgressChakela1->setposition(pProgressChakela2->getposition());// 		this->addChild(pProgressChakela1,enTagMPProgressChakela1);		//创建主角头像		CCSprite * pProgonisthead = CCSprite::create("gameui/head_zuozhu.png");		CC_BREAK_IF(pProgonisthead==NulL);		pProgonisthead->setposition(ccp(pBloodBG->getpositionX()-100,pBloodBG->getpositionY()+10));		addChild(pProgonisthead,enZOrderMID);		m_fNowHPProgress2 = 100.f;		m_pTargetEnemy = NulL;		m_nEnemyBloodVisibleTime = 0;		m_nEnemyBloodVisibleTimeTemp = 200;		//添加敌人血条背景		CCSprite* pEnemyBloodBG = CCSprite::create("gameui/value_enemy_hp_bg.png");		CC_BREAK_IF(pEnemyBloodBG==NulL);		pEnemyBloodBG->setposition(ccp(SCREEN_WIDTH-60,SCREEN_HEIGHT-90));		this->addChild(pEnemyBloodBG,enZOrderMID,enTagHPEnemyProgressBg);		pEnemyBloodBG->setcolor(ccBLACK);		pEnemyBloodBG->setVisible(false);		CCSprite* pEnemySpr2 = CCSprite::create("gameui/value_enemy_hp.png");		CC_BREAK_IF(pEnemySpr2==NulL);		CCProgresstimer* pEnemyProgress2 = CCProgresstimer::create(pEnemySpr2);		CC_BREAK_IF(pEnemyProgress2==NulL);		pEnemyProgress2->setType(kCCProgresstimerTypebar);		pEnemyProgress2->setMIDpoint(ccp(0.f,0.f));		pEnemyProgress2->setbarChangeRate(ccp(1.f,0.f));		pEnemyProgress2->setPercentage(100.f);		pEnemyProgress2->setposition(pEnemyBloodBG->getposition());		this->addChild(pEnemyProgress2,enTagHPEnemyProgress2);		pEnemyProgress2->setopacity(150.f);		pEnemyProgress2->setVisible(false);		CCSprite* pEnemySpr1 = CCSprite::create("gameui/value_enemy_hp.png");		CC_BREAK_IF(pEnemySpr1==NulL);		CCProgresstimer* pEnemyProgress1 = CCProgresstimer::create(pEnemySpr1);		CC_BREAK_IF(pEnemyProgress1==NulL);		pEnemyProgress1->setType(kCCProgresstimerTypebar);		pEnemyProgress1->setMIDpoint(ccp(0.f,0.f));		pEnemyProgress1->setbarChangeRate(ccp(1.f,0.f));		pEnemyProgress1->setPercentage(100.f);		pEnemyProgress1->setposition(pEnemyBloodBG->getposition());		this->addChild(pEnemyProgress1,enTagHPEnemyProgress1);		pEnemyProgress1->setVisible(false);		m_fNowHPProgress2 = 100.f;		m_fNowEnemyHpProgress2 = 100.f;		m_pTargetEnemy = NulL;		/************************************************************************/		/*					创建菜单                                                                     */		/************************************************************************/		//创建按钮		Ccmenu * pMenu = Ccmenu::create();		CC_BREAK_IF(pMenu==NulL);		pMenu->setposition(CCPointZero);		addChild(pMenu,enZOrderFront+100,enTagMenu);		//若为副本,则创建自动AI按钮		if (nStageID >= _NF_TOWN_OR_BATTLE_ID_ && nStageID <_NF_TOWN_FB_ID_)		{			//临时:创建主角AI控制按钮			CcmenuItemLabel * pBtnProAICtrl = CcmenuItemLabel::create(cclabelTTF::create("Manual","Arial",20),this,menu_selector(CNFGameScene::OnBtnCallBack));			CC_BREAK_IF(pBtnProAICtrl==NulL);			pBtnProAICtrl->setposition(ccp(SCREEN_WIDTH-60.f,SCREEN_HEIGHT-40.f));			pMenu->addChild(pBtnProAICtrl,enTagBtnProAICtrl);			//临时:创建返回城镇按钮			CcmenuItemLabel * pBtnBackToTown = CcmenuItemLabel::create(cclabelTTF::create("Town",menu_selector(CNFGameScene::OnBtnCallBack));			CC_BREAK_IF(pBtnBackToTown==NulL);			pBtnBackToTown->setposition(ccp(60.f,350));			pMenu->addChild(pBtnBackToTown,enTagBtnBackToTown);		}		m_nProgonistLevel = 1;		m_fProgonistExp = 0;		tagLevelUpExpStaticInfo LevelUpInfo;		CNFStaticdataManager::SharedData()->GetLevelUpExpStaticInfo(m_nProgonistLevel,LevelUpInfo);		m_fProgonistExpLevel = LevelUpInfo.fLevelUpExp;		//创建等级数字		char szname[name_LEN] = {0};		sprintf(szname,"%d",m_nProgonistLevel);		cclabelTTF * pLevel = cclabelTTF::create(szname,18);		CC_BREAK_IF(pLevel==NulL);		pLevel->setposition(ccp(pBloodBG->getpositionX()-130,pBloodBG->getpositionY()-32));		addChild(pLevel,enZOrderFront+90,enTagLevel);		//创建经验进度条		CCSprite* pExpSpr = CCSprite::create("gameui/value_exp.png");		CC_BREAK_IF(pExpSpr==NulL);		CCProgresstimer* pExpPro = CCProgresstimer::create(pExpSpr);		CC_BREAK_IF(pExpPro==NulL);		pExpPro->setType(kCCProgresstimerTypebar);		pExpPro->setMIDpoint(ccp(0.f,0.f));		pExpPro->setbarChangeRate(ccp(1.f,0.f));		pExpPro->setPercentage(0.f);		pExpPro->setposition(ccp(86,SCREEN_HEIGHT - 94.f));		this->addChild(pExpPro,enZOrderFront+95,enTagExpPro);				//连击数数字		sprintf(szname,"%dhit",m_nHitNum);		cclabelBMFont* pHitTime = cclabelBMFont::create(szname,"Fonts/futura-48.fnt");		CC_BREAK_IF(!pHitTime);		pHitTime->setposition(ccp(90,SCREEN_HEIGHT*0.7f));		addChild(pHitTime,enTagHitNum);		pHitTime->setVisible(false);		//注册Update函数		this->schedule(schedule_selector(CNFGameScene::OnCallPerFrame));		return true;	} while (false);	cclog("Fun CMGameScene::init Error!");	return false;}voID CNFGameScene::OnCallPerFrame(float dt){	do 	{		//得到3D世界层		CNF3DWorldLayer * pLayer = dynamic_cast<CNF3DWorldLayer *>(getChildByTag(enTag3D));		CC_BREAK_IF(pLayer==NulL);		pLayer->update(dt);		////=============================================================================键盘						//if((GetAsyncKeyState(0x4a) & 0x8000 ? 1 : 0)){		//	if(m_bIsPressJ==false){		//		cclog("j");		//		CNFProtagonist* pSprite = dynamic_cast<CNFProtagonist*>(pLayer->getChildByTag(CNF3DWorldLayer::enTagProtagonist));		//		if(pSprite!=NulL){		//			pSprite->OnCtrlCommonAttack();		//		}		//	}		//}m_bIsPressJ = (GetAsyncKeyState(0x4a) & 0x8000 ? 1 : 0);		//if((GetAsyncKeyState(0x4b) & 0x8000 ? 1 : 0)){		//	if(m_bIsPressK==false){		//		cclog("k");		//		CNFProtagonist* pSprite = dynamic_cast<CNFProtagonist*>(pLayer->getChildByTag(CNF3DWorldLayer::enTagProtagonist));		//		if(pSprite!=NulL){		//			pSprite->ProtagonistJump();		//		}		//	}		//}m_bIsPressK = (GetAsyncKeyState(0x4b) & 0x8000 ? 1 : 0);		//if((GetAsyncKeyState(0x4c) & 0x8000 ? 1 : 0)){		//	if(m_bIsPressL==false){		//		cclog("l");		//		CNFProtagonist* pSprite = dynamic_cast<CNFProtagonist*>(pLayer->getChildByTag(CNF3DWorldLayer::enTagProtagonist));		//		if(pSprite!=NulL){		//			pSprite->OnCtrlSkill1();		//		}		//	}		//}m_bIsPressL = (GetAsyncKeyState(0x4c) & 0x8000 ? 1 : 0);		//if((GetAsyncKeyState(0x49) & 0x8000 ? 1 : 0)){		//	if(m_bIsPressI==false){		//		cclog("i");		//		CNFProtagonist* pSprite = dynamic_cast<CNFProtagonist*>(pLayer->getChildByTag(CNF3DWorldLayer::enTagProtagonist));		//		if(pSprite!=NulL){		//			pSprite->OnCtrlSkill3();		//		}		//	}		//}m_bIsPressI = (GetAsyncKeyState(0x49) & 0x8000 ? 1 : 0);		//CNFProtagonist* pSprite = dynamic_cast<CNFProtagonist*>(pLayer->getChildByTag(CNF3DWorldLayer::enTagProtagonist));		//if(pSprite!=NulL){		//	if(fMoveRate<0){		//		CNFRockerLayer * pRocker = dynamic_cast<CNFRockerLayer*>(this->getChildByTag(enTagRocker));		//		if(pRocker!=NulL){		//			if(pRocker->GetIstouching()==false){		//				pSprite->SetStop();		//			}		//		}		//	}else{		//		if(m_bIsRun){		//			pSprite->SetRunByRotation(fMoveRate);		//		}else{		//			pSprite->SetMoveByRotation(fMoveRate);		//		}		//	}		//}		//=============================================================================键盘end		//同步主角血条		CNFProtagonist * pProtagonist = dynamic_cast<CNFProtagonist *>(pLayer->getChildByTag(enTagProtagonist));		if(pProtagonist!=NulL){			CCProgresstimer* pProgress = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPProgress1));			if(pProgress!=NulL){				pProgress->setPercentage(pProtagonist->GetHPPercent()*100);			}			CCProgresstimer* pProgress2 = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagMPProgressChakela2));			if(pProgress2!=NulL){				pProgress2->setPercentage(pProtagonist->GetMPPercent()*100);			}		}		if(pProtagonist!=NulL)		{			if((pProtagonist->GetHPPercent()*100)<m_fNowHPProgress2){				m_fNowHPProgress2 -= 0.5;			}else{				m_fNowHPProgress2 = (pProtagonist->GetHPPercent()*100);				CCProgresstimer* pProgress = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPProgress1));				if(pProgress!=NulL){					pProgress->setPercentage(pProtagonist->GetHPPercent()*100);				}			}			if(m_fNowHPProgress2<0){m_fNowHPProgress2 = 0;}			CCProgresstimer* pProgress = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPProgress2));			if(pProgress!=NulL)			{				pProgress->setPercentage(m_fNowHPProgress2);			}		}		//敌人血条		if (m_nEnemyBloodVisibleTime > 0)		{			m_nEnemyBloodVisibleTime--;		}		else		{			CCProgresstimer* pProgress1 = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPEnemyProgress1));			CCProgresstimer* pProgress2 = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPEnemyProgress2));			CCSprite* pEnemyBloodBG = dynamic_cast<CCSprite *>(getChildByTag(enTagHPEnemyProgressBg));			pProgress1->setVisible(false);			pProgress2->setVisible(false);			pEnemyBloodBG->setVisible(false);		}		//同步被击中的敌人血条		if (m_pTargetEnemy!=NulL&&m_pTargetEnemy->IsDeath()==false)		{			CCProgresstimer* pProgress = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPEnemyProgress1));			if(pProgress!=NulL){				pProgress->setPercentage(m_pTargetEnemy->GetHPPercent()*100);			}		}		if (m_pTargetEnemy!=NulL&&m_pTargetEnemy->IsDeath()==false)		{			if((m_pTargetEnemy->GetHPPercent()*100)<m_fNowEnemyHpProgress2){				m_fNowEnemyHpProgress2 -= 0.5;			}else{				m_fNowEnemyHpProgress2 = (m_pTargetEnemy->GetHPPercent()*100);				CCProgresstimer* pProgress = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPEnemyProgress1));				if(pProgress!=NulL){					pProgress->setPercentage(m_pTargetEnemy->GetHPPercent()*100);				}			}			if(m_fNowHPProgress2<0){m_fNowEnemyHpProgress2 = 0;}			CCProgresstimer* pProgress = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPEnemyProgress2));			if(pProgress!=NulL)			{				pProgress->setPercentage(m_fNowEnemyHpProgress2);			}		}		//连击		if (m_nHitTimeTemp > 0)		{			m_nHitTimeTemp--;		}		else if (m_nHitTimeTemp==0)		{			//连击结束			cclabelBMFont* pHitTime = dynamic_cast<cclabelBMFont *>(getChildByTag(enTagHitNum));			if (pHitTime!=NulL)			{				pHitTime->setVisible(false);			}			//显示连击结果			ShowHitResult();		}		return;	} while (false);	cclog("fun CNFGameScene::Update Error!");}voID CNFGameScene::onEnter(){	cclayer::onEnter();	CCDirector::sharedDirector()->gettouchdispatcher()->addTargetedDelegate(this,-127,false);}voID CNFGameScene::onExit(){	CCDirector::sharedDirector()->gettouchdispatcher()->removeDelegate(this);	cclayer::onExit();}bool CNFGameScene::cctouchBegan( CCtouch *ptouch,CCEvent *pEvent ){	return true;}voID CNFGameScene::cctouchmoved( CCtouch *ptouch,CCEvent *pEvent ){	}voID CNFGameScene::cctouchended( CCtouch *ptouch,CCEvent *pEvent ){	do 	{		//得到3D世界层		CNF3DWorldLayer * pLayer = dynamic_cast<CNF3DWorldLayer *>(getChildByTag(enTag3D));		CC_BREAK_IF(pLayer==NulL);		pLayer->ClickNPC(ptouch);		return;	} while (false);	return;}voID CNFGameScene::cctouchCancelled( CCtouch *ptouch,CCEvent *pEvent ){}voID CNFGameScene::ReCMSg( int enMsg,int nSize ){	do 	{		switch (enMsg)		{		case enMsg_Hit_Enemy:		//击中敌人			{				CNFBasicPerson * pPerson = (CNFBasicPerson *)pData;				CNFEnemy * pEnemy = dynamic_cast<CNFEnemy *>(pPerson);				if (pEnemy!=NulL)				{  					CCProgresstimer* pProgress1 = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPEnemyProgress1));					CCProgresstimer* pProgress2 = dynamic_cast<CCProgresstimer*>(this->getChildByTag(enTagHPEnemyProgress2));					CCSprite* pEnemyBloodBG = dynamic_cast<CCSprite *>(getChildByTag(enTagHPEnemyProgressBg));					//pProgress1->setVisible(true);					//pProgress2->setVisible(true);					//pEnemyBloodBG->setVisible(true);					m_pTargetEnemy = pEnemy;					m_nEnemyBloodVisibleTime = m_nEnemyBloodVisibleTimeTemp;					m_fNowEnemyHpProgress2 = m_pTargetEnemy->GetHP2Percent()*100;					//若在连击时间内					if (m_nHitTimeTemp > 0)					{						m_nHitNum ++;					}					else						{						m_nHitNum = 1;					}										//重置连击时间					m_nHitTimeTemp = m_nHitTime;					//连击显示					cclabelBMFont* pHitTime = dynamic_cast<cclabelBMFont *>(getChildByTag(enTagHitNum));					if (pHitTime!=NulL)					{						char szname[name_LEN] = {0};						sprintf(szname,m_nHitNum);						pHitTime->setString(szname);						pHitTime->setVisible(true);					}				}			}break;		case enMsg_RemoveEnemy:			{				m_fProgonistExp += 20;				//若升级				if (m_fProgonistExp >= m_fProgonistExpLevel)				{					m_fProgonistExp -= m_fProgonistExpLevel;					m_nProgonistLevel ++;					//显示数字					char szname[name_LEN] = {0};					sprintf(szname,m_nProgonistLevel);					cclabelTTF * pLevel = dynamic_cast<cclabelTTF *>(getChildByTag(enTagLevel));					CC_BREAK_IF(pLevel==NulL);					pLevel->setString(szname);					tagLevelUpExpStaticInfo LevelUpExpInfo;					CNFStaticdataManager::SharedData()->GetLevelUpExpStaticInfo(m_nProgonistLevel,LevelUpExpInfo);					m_fProgonistExpLevel = LevelUpExpInfo.fLevelUpExp;				}				//经验进度条				CCProgresstimer* pExpPro = dynamic_cast<CCProgresstimer *>(getChildByTag(enTagExpPro));				CC_BREAK_IF(pExpPro==NulL);				pExpPro->setPercentage(m_fProgonistExp/m_fProgonistExpLevel*100);			}break;		case enMsgCreateGameWinLayer:			{				OnSubMsgGameWin(pData,nSize);			}break;		case enMsgCreateGameOverLayer:			{				OnSubMsgGameOver(pData,nSize);			}break;		}		return ;	} while (false);}voID CNFGameScene::ShowHitResult(){	do 	{		//连击结果		cclabelBMFont* poldHitResult = dynamic_cast<cclabelBMFont *>(getChildByTag(enTagHitResult));		if (poldHitResult!=NulL)		{			removeChildByTag(enTagHitResult,true);		}		//5次连击以上,才显示		if (m_nHitNum >= 5)		{			char szname[name_LEN] = {0};			sprintf(szname,"MAX%dHIT",m_nHitNum);			cclabelBMFont* pHitResult = cclabelBMFont::create(szname,"Fonts/futura-48.fnt");			CC_BREAK_IF(!pHitResult);			pHitResult->setposition(ccp(SCREEN_WIDTH*0.5f,SCREEN_HEIGHT*0.8f));			addChild(pHitResult,enTagHitResult);			pHitResult->setopacity(0.f);			CCFiniteTimeAction * pSpawnAction = CCSpawn::create(				CCMoveBy::create(0.1f,ccp(0,40)),CCScaleBy::create(0.1f,1.1f),CCFadeIn::create(0.1f),NulL);			CC_BREAK_IF(pSpawnAction==NulL);			CCAction * pSequenceAction = CCSequence::create(				pSpawnAction,CCDelayTime::create(1.f),CCCallFunc::create(this,callfunc_selector(CNFGameScene::OnHitResultOverCallBack)),NulL);			CC_BREAK_IF(pSequenceAction==NulL);			pHitResult->runAction(pSequenceAction);		}		m_nHitTimeTemp = -1;		return ;	} while (false);	cclog("Fun CNFGameScene::ShowHitResult Error!");}voID CNFGameScene::OnHitResultOverCallBack(){	do 	{		//连击结果		cclabelBMFont* poldHitResult = dynamic_cast<cclabelBMFont *>(getChildByTag(enTagHitResult));		if (poldHitResult!=NulL)		{			removeChildByTag(enTagHitResult,true);		}		return ;	} while (false);	cclog("Fun CNFGameScene::OnHitResultOverCallBack Error!");}voID CNFGameScene::OnBtnCallBack( CCObject *pObj ){	do 	{		Ccmenu * pMenu = dynamic_cast<Ccmenu *>(getChildByTag(enTagMenu));		CC_BREAK_IF(pMenu==NulL);		int nTag = (dynamic_cast<CcmenuItemLabel *>(pObj))->getTag();		switch (nTag)		{		case enTagBtnProAICtrl:			{				CcmenuItemLabel * pBtnProAICtrl = dynamic_cast<CcmenuItemLabel *>(pMenu->getChildByTag(enTagBtnProAICtrl));				CC_BREAK_IF(pBtnProAICtrl==NulL);				cclabelTTF * pLabel = dynamic_cast<cclabelTTF *>(pBtnProAICtrl->getLabel());				CC_BREAK_IF(pLabel==NulL);				//得到3D世界层				CNF3DWorldLayer * pLayer = dynamic_cast<CNF3DWorldLayer *>(getChildByTag(enTag3D));				CC_BREAK_IF(pLayer==NulL);				CNFProtagonist * pProtagonist = dynamic_cast<CNFProtagonist *>(pLayer->getChildByTag(enTagProtagonist));				if(pProtagonist!=NulL)				{					//若当前为手动					if ( strcmp(pLabel->getString(),"Manual")==0 )					{						pLabel->setString("auto");						pProtagonist->SetautoMode(true);					}					//若当前为自动					else if ( strcmp(pLabel->getString(),"auto")==0 )					{						pLabel->setString("Manual");						pProtagonist->SetautoMode(false);					}				}			}break;		case enTagBtnBackToTown:			{				//跳转到城镇				CCScene * pScene = CNFTownScene::CreatetownScene(1,m_nRoleID);				CC_BREAK_IF(pScene==NulL);				CCDirector::sharedDirector()->replaceScene(CCTransitionFade::create(1.f,pScene));			}break;		}		return ;	} while (false);	cclog("Fun CNFGameScene::OnBtnCallBack Error!");}bool CNFGameScene::OnSubMsgGameWin( voID *pInfo,int nSize ){	do 	{		if(getChildByTag(enTagGameWinLayer))return false;		//CNFTipLayer* pWinLayer = CNFTipLayer::CreateLayer(1);		//CC_BREAK_IF(pWinLayer==NulL);		//addChild(pWinLayer,enZOrderFront+10000,enTagGameWinLayer);		//创建主场景UI层		UILayer* pWinLayer = UILayer::create(); 		CC_BREAK_IF(pWinLayer==NulL);		//加入主场景UI		UILayout *pFb_Win = dynamic_cast<UILayout*>	(GUIReader::shareReader()->WidgetFromJsonfile("Fb_Win.Json"));		CC_BREAK_IF(pFb_Win==NulL);		pWinLayer->addWidget(pFb_Win);		pFb_Win->setname("pFb_Win");		pFb_Win->setSize(getContentSize());		addChild(pWinLayer,enTagGameWinLayer);		//回城按钮回调		UIbutton* pbutton_back_town =dynamic_cast<UIbutton*>(pFb_Win->getChildByname("button_back_town"));		CC_BREAK_IF(pbutton_back_town==NulL);		pbutton_back_town->addtouchEventListener(this,toucheventselector(CNFGameScene::OnReturnToTownClick));		return true;	} while (false);	cclog("Fun CNFGameScene::OnSubMsgGameWin Error!");	return false;}bool CNFGameScene::OnSubMsgGameOver( voID *pInfo,int nSize ){	do 	{		if(getChildByTag(enMsgGameOverLayer))return false;		//CNFTipLayer* pWinLayer = CNFTipLayer::CreateLayer(0);		//CC_BREAK_IF(pWinLayer==NulL);		//addChild(pWinLayer,enMsgGameOverLayer);		//创建主场景UI层		UILayer* pLoseLayer = UILayer::create(); 		CC_BREAK_IF(pLoseLayer==NulL);		//加入主场景UI		UILayout *pFb_Lose = dynamic_cast<UILayout*>	(GUIReader::shareReader()->WidgetFromJsonfile("Fb_Lose.Json"));		CC_BREAK_IF(pFb_Lose==NulL);		pLoseLayer->addWidget(pFb_Lose);		pFb_Lose->setSize(getContentSize());		pFb_Lose->setname("Fb_Lose");		addChild(pLoseLayer,enMsgGameOverLayer);		//回城按钮回调		UIbutton* pbutton_back_town =dynamic_cast<UIbutton*>(pFb_Lose->getChildByname("button_back_town"));		CC_BREAK_IF(pbutton_back_town==NulL);		pbutton_back_town->addtouchEventListener(this,toucheventselector(CNFGameScene::OnReturnToTownClick));		return true;	} while (false);	cclog("Fun CNFGameScene::OnSubMsgGameOver Error!");	return false;}voID CNFGameScene::OnReturnToTownClick( CCObject* pSender,touchEventType type ){	do 	{		switch (type)		{		case touch_EVENT_ENDED:			{				//跳转到城镇				CCScene * pScene = CNFTownScene::CreatetownScene(1,pScene));			}break;		}		return ;	} while (false);	cclog("Fun CNFGameScene::OnReturnToTownClick Error!");}
个人博客 www.sundaboke.com 总结

以上是内存溢出为你收集整理的分析Cocos2d-x横版ACT手游源代码 4、场景全部内容,希望文章能够帮你解决分析Cocos2d-x横版ACT手游源代码 4、场景所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1016764.html

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

发表评论

登录后才能评论

评论列表(0条)

保存