cocos2d中getasynckeystate android,分析Cocos2d-x横版ACT手游源代码 4、场景
.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:
//==============================================================================臨時(shí)對(duì)應(yīng)win32
bool m_bIsPressW;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
bool m_bIsPressA;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
bool m_bIsPressS;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
bool m_bIsPressD;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
bool m_bIsPressJ;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
bool m_bIsPressK;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
bool m_bIsPressL;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
bool m_bIsPressI;//win32下對(duì)應(yīng)的鍵盤按鍵是否被按下(臨時(shí))
int m_nRunSpace;//連續(xù)按方向鍵使奔跑的時(shí)間間隔
float m_fFirectionOld;//上一次移動(dòng)方向
bool m_bIsRun;//是否處于奔跑狀態(tài)
//==============================================================================臨時(shí)對(duì)應(yīng)win32 end
floatm_fNowHPProgress2;//當(dāng)前Hp2的百分比
floatm_fNowEnemyHpProgress2;//當(dāng)前敵人Hp2的百分比
CNFEnemy* m_pTargetEnemy;//被擊中的目標(biāo)敵人
intm_nEnemyBloodVisibleTime;//敵人血條顯示時(shí)間(幀)
intm_nEnemyBloodVisibleTimeTemp;//當(dāng)前敵人血條顯示時(shí)間(幀)
intm_nHitNum;//連擊數(shù)
intm_nHitTime;//連擊間隔時(shí)間
intm_nHitTimeTemp;//當(dāng)前連擊時(shí)間
intm_nProgonistLevel;//角色等級(jí)
floatm_fProgonistExp;//角色經(jīng)驗(yàn)
floatm_fProgonistExpLevel;//角色升級(jí)所需經(jīng)驗(yàn)
boolm_bBtnListSwitch;//下方按鈕列表開關(guān)
boolm_bBtnListSwitchMoveOver;//下方按鈕列表動(dòng)畫結(jié)束標(biāo)識(shí)
intm_nStageID;//戰(zhàn)場(chǎng)ID
intm_nRoleID;//角色I(xiàn)D
public:
//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);
//更新函數(shù)
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();
//接收函數(shù)
virtual void RecMsg(int enMsg,void* pData,int nSize);
//動(dòng)作回調(diào):連擊結(jié)果結(jié)束
void OnHitResultOverCallBack();
//顯示連擊結(jié)果
void ShowHitResult();
//消息處理:游戲勝利
bool OnSubMsgGameWin(void *pInfo,int nSize);
//消息處理:游戲失敗
bool OnSubMsgGameOver(void *pInfo,int nSize);
//按鈕回調(diào)
void OnBtnCallBack(CCObject *pObj);
//回城按鈕回調(diào)
void OnReturnToTownClick(CCObject* pSender,TouchEventType type);
protected:
//標(biāo)簽
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_7
CCScene* CNFGameScene::CreateGameScene(int nStageID,int nRoleID)
{
do
{
//建立場(chǎng)景
CCScene* pScene = CCScene::create();
CC_BREAK_IF(pScene==NULL);
//建立層
CNFGameScene* pLayer = CNFGameScene::CreateLayer(nStageID,nRoleID);
CC_BREAK_IF(pLayer==NULL);
//將層加入場(chǎng)景
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;//連擊數(shù)
m_nHitTime = 60;//連擊間隔時(shí)間
m_nHitTimeTemp = -1;//當(dāng)前連擊時(shí)間
m_bBtnListSwitchMoveOver=true;
m_bBtnListSwitch=false;
//創(chuàng)建3D世界
CNF3DWorldLayer * pLayer = CNF3DWorldLayer::CreateLayer(m_nStageID,m_nRoleID);
CC_BREAK_IF(pLayer==NULL);
pLayer->SetMsg(this);
addChild(pLayer,enZOrderBack,enTag3D);
//創(chuàng)建搖桿
CNFRockerLayer * pRocker = CNFRockerLayer::CreateLayer(pLayer,m_nStageID);
CC_BREAK_IF(pRocker==NULL);
addChild(pRocker,enZOrderFront,enTagRocker);
//創(chuàng)建血條背景
CCSprite * pBloodBG = CCSprite::create("gameui/bg_status.png");
CC_BREAK_IF(pBloodBG==NULL);
pBloodBG->setPosition(ccp(175,SCREEN_HEIGHT-55));
addChild(pBloodBG,enZOrderMid);
//創(chuàng)建主角血條
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);
//創(chuàng)建主角查克拉
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);
//創(chuàng)建主角頭像
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;
/************************************************************************/
/*創(chuàng)建菜單 */
/************************************************************************/
//創(chuàng)建按鈕
CCMenu * pMenu = CCMenu::create();
CC_BREAK_IF(pMenu==NULL);
pMenu->setPosition(CCPointZero);
addChild(pMenu,enZOrderFront+100,enTagMenu);
//若為副本,則創(chuàng)建自動(dòng)AI按鈕
if (nStageID >= _NF_TOWN_OR_BATTLE_ID_ && nStageID <_nf_town_fb_id_>
{
//臨時(shí):創(chuàng)建主角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);
//臨時(shí):創(chuàng)建返回城鎮(zhèn)按鈕
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;
//創(chuàng)建等級(jí)數(shù)字
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);
//創(chuàng)建經(jīng)驗(yàn)進(jìn)度條
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);
//連擊數(shù)數(shù)字
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);
//注冊(cè)Update函數(shù)
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(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(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(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(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(pLayer->getChildByTag(CNF3DWorldLayer::enTagProtagonist));
//if(pSprite!=NULL){
//pSprite->OnCtrlSkill3();
//}
//}
//}m_bIsPressI = (GetAsyncKeyState(0x49) & 0x8000 ? 1 : 0);
//CNFProtagonist* pSprite = dynamic_cast(pLayer->getChildByTag(CNF3DWorldLayer::enTagProtagonist));
//if(pSprite!=NULL){
//if(fMoveRate<0){
//CNFRockerLayer * pRocker = dynamic_cast(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(pLayer->getChildByTag(enTagProtagonist));
if(pProtagonist!=NULL){
CCProgressTimer* pProgress = dynamic_cast(this->getChildByTag(enTagHPProgress1));
if(pProgress!=NULL){
pProgress->setPercentage(pProtagonist->GetHPPercent()*100);
}
CCProgressTimer* pProgress2 = dynamic_cast(this->getChildByTag(enTagMPProgressChakela2));
if(pProgress2!=NULL){
pProgress2->setPercentage(pProtagonist->GetMPPercent()*100);
}
}
if(pProtagonist!=NULL)
{
if((pProtagonist->GetHPPercent()*100)
m_fNowHPProgress2 -= 0.5;
}else{
m_fNowHPProgress2 = (pProtagonist->GetHPPercent()*100);
CCProgressTimer* pProgress = dynamic_cast(this->getChildByTag(enTagHPProgress1));
if(pProgress!=NULL){
pProgress->setPercentage(pProtagonist->GetHPPercent()*100);
}
}
if(m_fNowHPProgress2<0){m_fNowHPProgress2 = 0;}
CCProgressTimer* pProgress = dynamic_cast(this->getChildByTag(enTagHPProgress2));
if(pProgress!=NULL)
{
pProgress->setPercentage(m_fNowHPProgress2);
}
}
//敵人血條
if (m_nEnemyBloodVisibleTime > 0)
{
m_nEnemyBloodVisibleTime--;
}
else
{
CCProgressTimer* pProgress1 = dynamic_cast(this->getChildByTag(enTagHPEnemyProgress1));
CCProgressTimer* pProgress2 = dynamic_cast(this->getChildByTag(enTagHPEnemyProgress2));
CCSprite* pEnemyBloodBG = dynamic_cast(getChildByTag(enTagHPEnemyProgressBg));
pProgress1->setVisible(false);
pProgress2->setVisible(false);
pEnemyBloodBG->setVisible(false);
}
//同步被擊中的敵人血條
if (m_pTargetEnemy!=NULL&&m_pTargetEnemy->IsDeath()==false)
{
CCProgressTimer* pProgress = dynamic_cast(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 -= 0.5;
}else{
m_fNowEnemyHpProgress2 = (m_pTargetEnemy->GetHPPercent()*100);
CCProgressTimer* pProgress = dynamic_cast(this->getChildByTag(enTagHPEnemyProgress1));
if(pProgress!=NULL){
pProgress->setPercentage(m_pTargetEnemy->GetHPPercent()*100);
}
}
if(m_fNowHPProgress2<0){m_fNowEnemyHpProgress2 = 0;}
CCProgressTimer* pProgress = dynamic_cast(this->getChildByTag(enTagHPEnemyProgress2));
if(pProgress!=NULL)
{
pProgress->setPercentage(m_fNowEnemyHpProgress2);
}
}
//連擊
if (m_nHitTimeTemp > 0)
{
m_nHitTimeTemp--;
}
else if (m_nHitTimeTemp==0)
{
//連擊結(jié)束
CCLabelBMFont* pHitTime = dynamic_cast(getChildByTag(enTagHitNum));
if (pHitTime!=NULL)
{
pHitTime->setVisible(false);
}
//顯示連擊結(jié)果
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(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(pPerson);
if (pEnemy!=NULL)
{
CCProgressTimer* pProgress1 = dynamic_cast(this->getChildByTag(enTagHPEnemyProgress1));
CCProgressTimer* pProgress2 = dynamic_cast(this->getChildByTag(enTagHPEnemyProgress2));
CCSprite* pEnemyBloodBG = dynamic_cast(getChildByTag(enTagHPEnemyProgressBg));
//pProgress1->setVisible(true);
//pProgress2->setVisible(true);
//pEnemyBloodBG->setVisible(true);
m_pTargetEnemy = pEnemy;
m_nEnemyBloodVisibleTime = m_nEnemyBloodVisibleTimeTemp;
m_fNowEnemyHpProgress2 = m_pTargetEnemy->GetHP2Percent()*100;
//若在連擊時(shí)間內(nèi)
if (m_nHitTimeTemp > 0)
{
m_nHitNum ++;
}
else
{
m_nHitNum = 1;
}
//重置連擊時(shí)間
m_nHitTimeTemp = m_nHitTime;
//連擊顯示
CCLabelBMFont* pHitTime = dynamic_cast(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;
//若升級(jí)
if (m_fProgonistExp >= m_fProgonistExpLevel)
{
m_fProgonistExp -= m_fProgonistExpLevel;
m_nProgonistLevel ++;
//顯示數(shù)字
char szName[NAME_LEN] = {0};
sprintf(szName,m_nProgonistLevel);
CCLabelTTF * pLevel = dynamic_cast(getChildByTag(enTagLevel));
CC_BREAK_IF(pLevel==NULL);
pLevel->setString(szName);
tagLevelUpExpStaticInfo LevelUpExpInfo;
CNFStaticDataManager::SharedData()->GetLevelUpExpStaticInfo(m_nProgonistLevel,LevelUpExpInfo);
m_fProgonistExpLevel = LevelUpExpInfo.fLevelUpExp;
}
//經(jīng)驗(yàn)進(jìn)度條
CCProgressTimer* pExpPro = dynamic_cast(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
{
//連擊結(jié)果
CCLabelBMFont* pOldHitResult = dynamic_cast(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
{
//連擊結(jié)果
CCLabelBMFont* pOldHitResult = dynamic_cast(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(getChildByTag(enTagMenu));
CC_BREAK_IF(pMenu==NULL);
int nTag = (dynamic_cast(pObj))->getTag();
switch (nTag)
{
case enTagBtnProAICtrl:
{
CCMenuItemLabel * pBtnProAICtrl = dynamic_cast(pMenu->getChildByTag(enTagBtnProAICtrl));
CC_BREAK_IF(pBtnProAICtrl==NULL);
CCLabelTTF * pLabel = dynamic_cast(pBtnProAICtrl->getLabel());
CC_BREAK_IF(pLabel==NULL);
//得到3D世界層
CNF3DWorldLayer * pLayer = dynamic_cast(getChildByTag(enTag3D));
CC_BREAK_IF(pLayer==NULL);
CNFProtagonist * pProtagonist = dynamic_cast(pLayer->getChildByTag(enTagProtagonist));
if(pProtagonist!=NULL)
{
//若當(dāng)前為手動(dòng)
if ( strcmp(pLabel->getString(),"Manual")==0 )
{
pLabel->setString("Auto");
pProtagonist->SetAutoMode(true);
}
//若當(dāng)前為自動(dòng)
else if ( strcmp(pLabel->getString(),"Auto")==0 )
{
pLabel->setString("Manual");
pProtagonist->SetAutoMode(false);
}
}
}break;
case enTagBtnBackToTown:
{
//跳轉(zhuǎn)到城鎮(zhèn)
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);
//創(chuàng)建主場(chǎng)景UI層
UILayer* pWinLayer = UILayer::create();
CC_BREAK_IF(pWinLayer==NULL);
//加入主場(chǎng)景UI
UILayout *pFb_Win = dynamic_cast(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);
//回城按鈕回調(diào)
UIButton* pButton_back_town =dynamic_cast(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);
//創(chuàng)建主場(chǎng)景UI層
UILayer* pLoseLayer = UILayer::create();
CC_BREAK_IF(pLoseLayer==NULL);
//加入主場(chǎng)景UI
UILayout *pFb_Lose = dynamic_cast(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);
//回城按鈕回調(diào)
UIButton* pButton_back_town =dynamic_cast(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:
{
//跳轉(zhuǎn)到城鎮(zhèn)
CCScene * pScene = CNFTownScene::CreateTownScene(1,pScene));
}break;
}
return ;
} while (false);
CCLog("Fun CNFGameScene::OnReturnToTownClick Error!");
} 個(gè)人博客 www.sundaboke.com
總結(jié)
如果覺得編程之家網(wǎng)站內(nèi)容還不錯(cuò),歡迎將編程之家網(wǎng)站推薦給程序員好友。
本圖文內(nèi)容來源于網(wǎng)友網(wǎng)絡(luò)收集整理提供,作為學(xué)習(xí)參考使用,版權(quán)屬于原作者。
小編個(gè)人微信號(hào) jb51ccc
喜歡與人分享編程技術(shù)與工作經(jīng)驗(yàn),歡迎加入編程之家官方交流群!
總結(jié)
以上是生活随笔為你收集整理的cocos2d中getasynckeystate android,分析Cocos2d-x横版ACT手游源代码 4、场景的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java经典300例-基础篇-001:H
- 下一篇: Java Web 回顾-HCJ