.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、场景所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)