.h文件
#ifndef _NF_3D_WORLD_LAYER_HEAD_
#define _NF_3D_WORLD_LAYER_HEAD_
#include "../publicdef/PublicDef.h"
#include "../gameunit/NFWorld3D.h"
#include "../datamanager/NFEnemyWave.h"
class CNF3DWorldLayer : public CNFWorld3DLayer,public CMsgReceiver,public CMsgSender
{
public:
//标签
enum
{
enTagMidTMXMap = 10000,enTagTMXMap1,enTagTMXMap2,enTagTMXMap3,};
CCArray * m_pArticleArray; //物体数组
CCArray *m_pFriendArray; //友方
CCArray *m_pEnemyArray; //敌方
int m_nStageID; //关卡ID
int m_nRoleID; //角色ID
CNFEnemyWave * m_pEnemyWave; //敌人波次
public:
static CNF3DWorldLayer * CreateLayer(int nStageID,int nRoleID);
//更新函数
void update(float delta);
//点击NPC。返回NPC的ID, 0为没有点击到NPC
int ClickNPC(CCTouch *pTouch);
//接收函数
virtual void RecMsg(int enMsg,void* pData,int nSize);
protected:
virtual bool InitLayer(int nStageID,int nRoleID);
//消息处理:移除敌人
bool OnSubMsgEnemyRemove(void *pInfo,int nSize);
//消息处理:移除主角
bool OnSubMsgProtagonistRemove(void *pInfo,int nSize);
//消息处理:敌人普通攻击
bool OnSubMsgEnemyCommonAttack(void *pInfo,int nSize);
//消息处理:技能
bool OnSubMsgProtagonistSkill(void *pInfo,int nSize);
//消息处理:切换场景
bool OnSubMsgTransfer(void *pInfo,int nSize);
//消息处理:创建敌人
bool OnSubMsgCreateEnemy(void *pInfo,int nSize);
//消息处理:游戏胜利
bool OnSubMsgGameWin(void *pInfo,int nSize);
void onExit();
};
#endif
.cpp文件
#include "NF3DWorldLayer.h"
#include "../tiledmap/NFTMXTiledMap.h"
#include "../gameunit/person/NFProtagonist.h"
#include "../gameunit/skill/NFCommonAttack.h"
#include "../gameunit/person/NFEnemy.h"
#include "../gameunit/article/NFBox.h"
#include "../gameunit/article/NFNPC.h"
#include "../gameunit/article/NFTransferDoor.h"
#include "../datamanager/NFDataManager.h"
#include "gamescene/NFGameScene.h"
#include "../ui/NFTownScene.h"
#define _TMX_START_X_<span style="white-space:pre"> </span>-30<span style="white-space:pre"> </span>//景深地图初始x轴坐标
CNF3DWorldLayer* CNF3DWorldLayer::CreateLayer(int nStageID,int nRoleID)
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CNF3DWorldLayer* pLayer = new CNF3DWorldLayer();
<span style="white-space:pre"> </span>if (pLayer!=NULL && pLayer->InitLayer(nStageID,nRoleID)==true)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>pLayer->autorelease();
<span style="white-space:pre"> </span>return pLayer;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>delete pLayer;
<span style="white-space:pre"> </span>pLayer = NULL;
<span style="white-space:pre"> </span>return NULL;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::CreateLayer Error!");
<span style="white-space:pre"> </span>return NULL;
}
bool CNF3DWorldLayer::InitLayer(int nStageID,int nRoleID)
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//读取关卡信息
<span style="white-space:pre"> </span>tagStageStaticInfo StageInfo;
<span style="white-space:pre"> </span>CNFStaticDataManager::SharedData()->GetStageStaticInfo(nStageID,StageInfo);
<span style="white-space:pre"> </span>if (StageInfo.fRate < 0)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CCLog("Fun 3D WorldLayer Create Error!");
<span style="white-space:pre"> </span>return false;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>m_nStageID = nStageID;
<span style="white-space:pre"> </span>m_nRoleID = nRoleID;
<span style="white-space:pre"> </span>tagSize3D StageSize3DInfo;
<span style="white-space:pre"> </span>StageSize3DInfo.fHeight=StageInfo.fHeight;
<span style="white-space:pre"> </span>StageSize3DInfo.fLength=StageInfo.fLength;
<span style="white-space:pre"> </span>StageSize3DInfo.fWidth=StageInfo.fWidth;
<span style="white-space:pre"> </span>//初始化父类
<span style="white-space:pre"> </span>CC_BREAK_IF(CNFWorld3DLayer::init(StageInfo.fRate,StageSize3DInfo)==false);
<span style="white-space:pre"> </span>m_pArticleArray = CCArray::create();
<span style="white-space:pre"> </span>m_pArticleArray->retain();
<span style="white-space:pre"> </span>m_pFriendArray = CCArray::create();
<span style="white-space:pre"> </span>m_pFriendArray->retain();
<span style="white-space:pre"> </span>m_pEnemyArray = CCArray::create();
<span style="white-space:pre"> </span>m_pEnemyArray->retain();
<span style="white-space:pre"> </span>//CNFBox* pBox = CNFBox::CreateBox(1);
<span style="white-space:pre"> </span>//pBox->SetMsg(this);
<span style="white-space:pre"> </span>//pBox->setPosition3D(400,400);
<span style="white-space:pre"> </span>//addChild(pBox,enZOrderMid);
<span style="white-space:pre"> </span>//m_pArticleArray->addObject(pBox);
<span style="white-space:pre"> </span>tagPosition3D ptPos3D;
<span style="white-space:pre"> </span>//创建角色
<span style="white-space:pre"> </span>CNFProtagonist* pProtagonist = CNFProtagonist::Create(m_nRoleID,m_pFriendArray,m_pEnemyArray);
<span style="white-space:pre"> </span>ptPos3D.fX = StageInfo.fProtagonistX;
<span style="white-space:pre"> </span>ptPos3D.fY = StageInfo.fProtagonistY;
<span style="white-space:pre"> </span>ptPos3D.fZ = 0;
<span style="white-space:pre"> </span>pProtagonist->SetMsg(this);
<span style="white-space:pre"> </span>pProtagonist->setPosition3D(ptPos3D);
<span style="white-space:pre"> </span>pProtagonist->SetArticleArray(m_pArticleArray);
<span style="white-space:pre"> </span>addChild(pProtagonist,enZOrderMid,enTagProtagonist);
<span style="white-space:pre"> </span>m_pFriendArray->addObject(pProtagonist);
<span style="white-space:pre"> </span>SetProtagonist(pProtagonist);
<span style="white-space:pre"> </span>//创建NPC
<span style="white-space:pre"> </span>for (CNFNPCJsonInfoVec::iterator it = StageInfo.NPCJsonInfoVec.begin();it != StageInfo.NPCJsonInfoVec.end();it++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CNFNPC* pNPC1 = CNFNPC::Create(it->nNPCID,it->NPCStaticInfo.strArmatureName.c_str(),it->NPCStaticInfo.fLength,it->NPCStaticInfo.fWidth,it->NPCStaticInfo.fHeight);
<span style="white-space:pre"> </span>pNPC1->SetMsg(this);
<span style="white-space:pre"> </span>ptPos3D.fX = it->fPosX;
<span style="white-space:pre"> </span>ptPos3D.fY = it->fPosY;
<span style="white-space:pre"> </span>ptPos3D.fZ = it->fPosZ;
<span style="white-space:pre"> </span>pNPC1->setPosition3D(ptPos3D);
<span style="white-space:pre"> </span>addChild(pNPC1,enZOrderMid);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//创建门
<span style="white-space:pre"> </span>for (CNFDoorJsonInfoVec::iterator it = StageInfo.DoorJsonInfoVec.begin();it != StageInfo.DoorJsonInfoVec.end();it++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CNFTransferDoor* pTransferDoor = CNFTransferDoor::Create(it->DoorStaticInfo.nRelaceStageID,pProtagonist,it->DoorStaticInfo.strArmatureName.c_str(),it->DoorStaticInfo.fLength,it->DoorStaticInfo.fWidth,it->DoorStaticInfo.fHeight);
<span style="white-space:pre"> </span>pTransferDoor->SetMsg(this);
<span style="white-space:pre"> </span>ptPos3D.fX = it->fPosX;
<span style="white-space:pre"> </span>ptPos3D.fY = it->fPosY;
<span style="white-space:pre"> </span>ptPos3D.fZ = it->fPosZ;
<span style="white-space:pre"> </span>pTransferDoor->setPosition3D(ptPos3D);
<span style="white-space:pre"> </span>addChild(pTransferDoor,enZOrderMid);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//若为副本
<span style="white-space:pre"> </span>if (nStageID >= _NF_TOWN_OR_BATTLE_ID_ && nStageID <_NF_TOWN_FB_ID_)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//创建敌人波次
<span style="white-space:pre"> </span>m_pEnemyWave = CNFEnemyWave::CreateEnemyWave(nStageID,m_pEnemyArray);
<span style="white-space:pre"> </span>CC_BREAK_IF(m_pEnemyWave==NULL);
<span style="white-space:pre"> </span>m_pEnemyWave->SetMsg(this);
// <span style="white-space:pre"> </span>CNFProtagonist* pProtagonist2 = CNFProtagonist::Create(2,m_pEnemyArray);
// <span style="white-space:pre"> </span>ptPos3D.fX = 700;
// <span style="white-space:pre"> </span>ptPos3D.fY = 500;
// <span style="white-space:pre"> </span>ptPos3D.fZ = 0;
// <span style="white-space:pre"> </span>pProtagonist2->SetMsg(this);
// <span style="white-space:pre"> </span>pProtagonist2->setPosition3D(ptPos3D);
// <span style="white-space:pre"> </span>pProtagonist2->SetArticleArray(m_pArticleArray);
// <span style="white-space:pre"> </span>pProtagonist2->SetAutoMode(true);
// <span style="white-space:pre"> </span>addChild(pProtagonist2,enZOrderMid);
// <span style="white-space:pre"> </span>m_pFriendArray->addObject(pProtagonist2);
//
// <span style="white-space:pre"> </span>CNFProtagonist* pProtagonist3 = CNFProtagonist::Create(1,m_pEnemyArray,m_pFriendArray);
// <span style="white-space:pre"> </span>ptPos3D.fX = 700;
// <span style="white-space:pre"> </span>ptPos3D.fY = 100;
// <span style="white-space:pre"> </span>ptPos3D.fZ = 0;
// <span style="white-space:pre"> </span>pProtagonist3->SetMsg(this);
// <span style="white-space:pre"> </span>pProtagonist3->setPosition3D(ptPos3D);
// <span style="white-space:pre"> </span>pProtagonist3->SetArticleArray(m_pArticleArray);
// <span style="white-space:pre"> </span>pProtagonist3->SetAutoMode(true);
// <span style="white-space:pre"> </span>addChild(pProtagonist3,enZOrderMid);
// <span style="white-space:pre"> </span>m_pEnemyArray->addObject(pProtagonist3);
//
//<span style="white-space:pre"> </span>//
//<span style="white-space:pre"> </span>CNFEnemy* pEnemy = CNFEnemy::CreateEnemy(pProtagonist);
//<span style="white-space:pre"> </span>pEnemy->SetMsg(this);
//<span style="white-space:pre"> </span>ptPos3D.fX = 700;
//<span style="white-space:pre"> </span>ptPos3D.fY = 20;
//<span style="white-space:pre"> </span>ptPos3D.fZ = 0;
//<span style="white-space:pre"> </span>pEnemy->setPosition3D(ptPos3D);
//<span style="white-space:pre"> </span>addChild(pEnemy,enZOrderMid);
//<span style="white-space:pre"> </span>pEnemy->SetArticleArray(m_pArticleArray);
//<span style="white-space:pre"> </span>m_pEnemyArray->addObject(pEnemy);
//
//
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//tiledmap
<span style="white-space:pre"> </span>CNFMidTMXMap* pGameMap = CNFMidTMXMap::CreateGameMap(StageInfo.strTMXWorldName.c_str(),this);
<span style="white-space:pre"> </span>CC_BREAK_IF(pGameMap==NULL);
<span style="white-space:pre"> </span>pGameMap->setPosition(ccp(_TMX_START_X_,0));
<span style="white-space:pre"> </span>addChild(pGameMap,-enTagMidTMXMap,enTagMidTMXMap);
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//创建景深地图
<span style="white-space:pre"> </span>int i = enTagTMXMap1;
<span style="white-space:pre"> </span>for (CNFTmxStaticInfoMap::iterator it = StageInfo.TmxStaticInfoMap.begin();it != StageInfo.TmxStaticInfoMap.end();it++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CMGameMapLayer* pGameMap = CMGameMapLayer::CreateGameMap(it->second.strTmxName.c_str());
<span style="white-space:pre"> </span>CC_BREAK_IF(pGameMap==NULL);
<span style="white-space:pre"> </span>pGameMap->setAnchorPoint(ccp(0,0));
<span style="white-space:pre"> </span>pGameMap->setPosition(ccp(it->second.fStartPosX,it->second.fStartPosY));
<span style="white-space:pre"> </span>addChild(pGameMap,-i,i);
<span style="white-space:pre"> </span>if (i==enTagTMXMap1)<span style="white-space:pre"> </span>pGameMap->SetSpeedMultipleX(0.9f);
<span style="white-space:pre"> </span>if (i==enTagTMXMap2)<span style="white-space:pre"> </span>pGameMap->SetSpeedMultipleX(0.1f);
<span style="white-space:pre"> </span>if (i==enTagTMXMap3)<span style="white-space:pre"> </span>pGameMap->SetSpeedMultipleX(1.0f);
<span style="white-space:pre"> </span>i++;
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::init Error!");
<span style="white-space:pre"> </span>return false;
}
void CNF3DWorldLayer::update(float delta)
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CCObject *pItem = NULL;
<span style="white-space:pre"> </span>CCARRAY_FOREACH(getChildren(),pItem)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CNFBasicUnit *pNodeItem = dynamic_cast<CNFBasicUnit*>(pItem);
<span style="white-space:pre"> </span>if(pNodeItem!=NULL)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//调整显示层级
<span style="white-space:pre"> </span>int nZOrder = enZOrderMid - pNodeItem->getPositionY();
<span style="white-space:pre"> </span>pNodeItem->setZOrder(nZOrder);
<span style="white-space:pre"> </span>pNodeItem->CallPerFrame(delta);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//遍历敌人波次
<span style="white-space:pre"> </span>if (m_nStageID >= _NF_TOWN_OR_BATTLE_ID_ && m_nStageID <_NF_TOWN_FB_ID_)
<span style="white-space:pre"> </span>m_pEnemyWave->update();
<span style="white-space:pre"> </span>//景深地图同步位置
<span style="white-space:pre"> </span>for (int i=enTagTMXMap1;i<=enTagTMXMap3;i++)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CMGameMapLayer* pGameMap = dynamic_cast<CMGameMapLayer *>(getChildByTag(i));
<span style="white-space:pre"> </span>if (pGameMap!=NULL)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//若存在缩放
<span style="white-space:pre"> </span>if (getScale() != 1)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>//若不存在缩放
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>pGameMap->setPositionX( getPositionX()*(pGameMap->GetSpeedMultipleX()-1) + _TMX_START_X_ );
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>CNFProtagonist* pProtagonist = dynamic_cast<CNFProtagonist*>(getChildByTag(enTagProtagonist));
<span style="white-space:pre"> </span>if(pProtagonist==NULL){
<span style="white-space:pre"> </span>SetProtagonist(NULL);
<span style="white-space:pre"> </span>SendMsg(enMsgCreateGameOverLayer,NULL,sizeof(NULL));
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>//CCLog("=========%f====%f",getPositionX(),getPositionY());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::update Error!");
}
int CNF3DWorldLayer::ClickNPC( CCTouch *pTouch )
{
<span style="white-space:pre"> </span>CCObject *pItem = NULL;
<span style="white-space:pre"> </span>CCARRAY_FOREACH(getChildren(),pItem)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>CNFNPC *pNodeItem = dynamic_cast<CNFNPC*>(pItem);
<span style="white-space:pre"> </span>if(pNodeItem!=NULL)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tagPosition3D wzNPC = pNodeItem->GetCurrentCube()->ptPos3D;
<span style="white-space:pre"> </span>tagSize3D szNPC = pNodeItem->GetCurrentCube()->szCube;
<span style="white-space:pre"> </span>CCPoint NPC2DPoint = ccp(wzNPC.fX + getPositionX() - 50,wzNPC.fY*pNodeItem->GetLTRate() + wzNPC.fZ);
<span style="white-space:pre"> </span>CCRect NPC2DRect = CCRectMake(NPC2DPoint.x,NPC2DPoint.y,szNPC.fLength,szNPC.fHeight);
<span style="white-space:pre"> </span>if(NPC2DPoint.x>0&&NPC2DRect.containsPoint(pTouch->getLocation())){
<span style="white-space:pre"> </span>//CCLog("%d==================%f",pNodeItem->GetID(),wzNPC.fX);
<span style="white-space:pre"> </span>CNFProtagonist* pRole = dynamic_cast<CNFProtagonist*>(getChildByTag(enTagProtagonist));
<span style="white-space:pre"> </span>if(pRole!=NULL){
<span style="white-space:pre"> </span>pRole->OnCtrlMoveToPonit(ccp(pNodeItem->GetCurrentCube()->ptPos3D.fX,pNodeItem->GetCurrentCube()->ptPos3D.fY));
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return 0;
}
void CNF3DWorldLayer::RecMsg( int enMsg,int nSize )
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>switch(enMsg)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>case enMsg_Hit_Enemy:
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//发消息,得到被击中的敌人是谁
<span style="white-space:pre"> </span>SendMsg(enMsg_Hit_Enemy,pData,nSize);
<span style="white-space:pre"> </span>}break;
<span style="white-space:pre"> </span>case enMsg_RemoveEnemy:<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>SendMsg(enMsg_RemoveEnemy,0);
<span style="white-space:pre"> </span>OnSubMsgEnemyRemove( pData,nSize );
<span style="white-space:pre"> </span>}break;
<span style="white-space:pre"> </span>case enMsg_RemoveProtagonist:<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>OnSubMsgProtagonistRemove( pData,nSize );
<span style="white-space:pre"> </span>}break;
<span style="white-space:pre"> </span>case enMsgEnemyCommonAttack:<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>OnSubMsgEnemyCommonAttack( pData,nSize );
<span style="white-space:pre"> </span>}break;
<span style="white-space:pre"> </span>case enMsgProtagonistSkill:<span style="white-space:pre"> </span>//消息处理:技能
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>OnSubMsgProtagonistSkill( pData,nSize );
<span style="white-space:pre"> </span>}break;
<span style="white-space:pre"> </span>case enMsgProtagonistTransfer:<span style="white-space:pre"> </span>//消息处理:传送门
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>OnSubMsgTransfer( pData,nSize );
<span style="white-space:pre"> </span>}break;
<span style="white-space:pre"> </span>//创建敌人
<span style="white-space:pre"> </span>case enMsgCreateEnemy:
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>OnSubMsgCreateEnemy(pData,nSize);
<span style="white-space:pre"> </span>}break;
<span style="white-space:pre"> </span>//游戏结束
<span style="white-space:pre"> </span>case enMsgGameWin:
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>OnSubMsgGameWin(pData,nSize);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return ;
<span style="white-space:pre"> </span>} while (false);
}
void CNF3DWorldLayer::onExit()
{
<span style="white-space:pre"> </span>m_pArticleArray->release();
<span style="white-space:pre"> </span>m_pFriendArray->release();
<span style="white-space:pre"> </span>m_pEnemyArray->release();
<span style="white-space:pre"> </span>CNFWorld3DLayer::onExit();
}
bool CNF3DWorldLayer::OnSubMsgEnemyRemove( void *pInfo,int nSize )
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//tagPosition3D ptPos3D;
<span style="white-space:pre"> </span>tagRemovePerson *pCmd = (tagRemovePerson*)pInfo;
<span style="white-space:pre"> </span>if(pCmd->pArrayTarget!=NULL){
<span style="white-space:pre"> </span>pCmd->pArrayTarget->removeObject(pCmd->pPerson);
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>m_pEnemyArray->removeObject(pCmd->pPerson);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>this->removeChild(pCmd->pPerson);
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::OnSubMsgEnemyRemove Error!");
<span style="white-space:pre"> </span>return false;
}
bool CNF3DWorldLayer::OnSubMsgProtagonistRemove( void *pInfo,int nSize )
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tagRemovePerson *pCmd = (tagRemovePerson*)pInfo;
<span style="white-space:pre"> </span>if(pCmd->pArrayTarget!=NULL){
<span style="white-space:pre"> </span>pCmd->pArrayTarget->removeObject(pCmd->pPerson);
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>m_pFriendArray->removeObject(pCmd->pPerson);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>this->removeChild(pCmd->pPerson);
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::OnSubMsgProtagonistRemove Error!");
<span style="white-space:pre"> </span>return false;
}
bool CNF3DWorldLayer::OnSubMsgEnemyCommonAttack( void *pInfo,int nSize )
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//return true;
<span style="white-space:pre"> </span>tagPosition3D ptPos3D;
<span style="white-space:pre"> </span>tagCommonAttack *pCmd = (tagCommonAttack*)pInfo;
<span style="white-space:pre"> </span>CNFCommonAttack* pAttack = CNFCommonAttack::CreateCommonAttack(pCmd,m_pFriendArray);
<span style="white-space:pre"> </span>if(pAttack!=NULL){
<span style="white-space:pre"> </span>ptPos3D.fX = pCmd->pReleaser->GetCurrentCube()->ptPos3D.fX + pCmd->fOldX;
<span style="white-space:pre"> </span>ptPos3D.fY = pCmd->pReleaser->GetCurrentCube()->ptPos3D.fY + pCmd->fOldY;
<span style="white-space:pre"> </span>ptPos3D.fZ = pCmd->pReleaser->GetCurrentCube()->ptPos3D.fZ + pCmd->fOldZ;
<span style="white-space:pre"> </span>pAttack->setPosition3D(ptPos3D);
<span style="white-space:pre"> </span>pAttack->SetGround(pCmd->pReleaser->GetGround());
<span style="white-space:pre"> </span>pAttack->SetMsg(this);
<span style="white-space:pre"> </span>this->addChild(pAttack,pCmd->pReleaser->getZOrder());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::OnSubMsgEnemyCommonAttack Error!");
<span style="white-space:pre"> </span>return false;
}
bool CNF3DWorldLayer::OnSubMsgProtagonistSkill( void *pInfo,pCmd->pArrayTarget);
<span style="white-space:pre"> </span>if(pAttack!=NULL){
<span style="white-space:pre"> </span>ptPos3D.fX = pCmd->pReleaser->GetCurrentCube()->ptPos3D.fX + pCmd->fOldX;
<span style="white-space:pre"> </span>ptPos3D.fY = pCmd->pReleaser->GetCurrentCube()->ptPos3D.fY + pCmd->fOldY;
<span style="white-space:pre"> </span>ptPos3D.fZ = pCmd->pReleaser->GetCurrentCube()->ptPos3D.fZ + pCmd->fOldZ;
<span style="white-space:pre"> </span>pAttack->setPosition3D(ptPos3D);
<span style="white-space:pre"> </span>pAttack->SetGround(pCmd->pReleaser->GetGround());
<span style="white-space:pre"> </span>pAttack->SetMsg(this);
<span style="white-space:pre"> </span>this->addChild(pAttack,pCmd->pReleaser->getZOrder());
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::OnSubMsgProtagonistSkill Error!");
<span style="white-space:pre"> </span>return false;
}
bool CNF3DWorldLayer::OnSubMsgTransfer( void *pInfo,int nSize )
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>tagTransferDoor *pCmd = (tagTransferDoor*)pInfo;
<span style="white-space:pre"> </span>CC_BREAK_IF(pCmd->nID<=0);
<span style="white-space:pre"> </span>if(pCmd->nID>_NF_TOWN_OR_BATTLE_ID_ && pCmd->nID <_NF_TOWN_FB_ID_){
<span style="white-space:pre"> </span>//跳转到副本
<span style="white-space:pre"> </span>CCScene * pScene = CNFGameScene::CreateGameScene(pCmd->nID,m_nRoleID);
<span style="white-space:pre"> </span>CC_BREAK_IF(pScene==NULL);
<span style="white-space:pre"> </span>CCDirector::sharedDirector()->replaceScene(/*CCTransitionFade::create(1.f,pScene)*/pScene);
<span style="white-space:pre"> </span>}else if(pCmd->nID>0 && pCmd->nID <_NF_TOWN_OR_BATTLE_ID_)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>//跳转到城镇
<span style="white-space:pre"> </span>CCScene * pScene = CNFTownScene::CreateTownScene(pCmd->nID,pScene)*/pScene);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>else
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>SendMsg(enMsgCreateFbSelectLayer,&pCmd->nID,sizeof(pCmd->nID));
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::OnSubMsgTransferSkill Error!");
<span style="white-space:pre"> </span>return false;
}
//消息处理:创建敌人
bool CNF3DWorldLayer::OnSubMsgCreateEnemy( void *pInfo,int nSize )
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>Cmd_CreateEnemyInfo *pCmd = (Cmd_CreateEnemyInfo *)pInfo;
<span style="white-space:pre"> </span>CNFProtagonist* pProtagonist = dynamic_cast<CNFProtagonist*>(getChildByTag(enTagProtagonist));
<span style="white-space:pre"> </span>if(pProtagonist!=NULL){
<span style="white-space:pre"> </span>CNFEnemy* pEnemy = CNFEnemy::CreateEnemy(pCmd->nEnemyID,pCmd->nEnemyLevel,m_pFriendArray);
<span style="white-space:pre"> </span>CC_BREAK_IF(pEnemy==NULL);
<span style="white-space:pre"> </span>pEnemy->SetMsg(this);
<span style="white-space:pre"> </span>int nTempL = Get3DWorldSize()->fLength;
<span style="white-space:pre"> </span>int nTempW = Get3DWorldSize()->fWidth;
<span style="white-space:pre"> </span>tagPosition3D ptPos3D;
<span style="white-space:pre"> </span>ptPos3D.fX = pCmd->fPosX;
<span style="white-space:pre"> </span>ptPos3D.fY = pCmd->fPosY;
<span style="white-space:pre"> </span>ptPos3D.fZ = 0;
<span style="white-space:pre"> </span>pEnemy->setPosition3D(ptPos3D);
<span style="white-space:pre"> </span>pEnemy->SetArticleArray(m_pArticleArray);
<span style="white-space:pre"> </span>addChild(pEnemy,enZOrderMid);
<span style="white-space:pre"> </span>m_pEnemyArray->addObject(pEnemy);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::OnSubMsgCreateEnemy Error!");
<span style="white-space:pre"> </span>return false;
}
//消息处理:游戏结束
bool CNF3DWorldLayer::OnSubMsgGameWin( void *pInfo,int nSize )
{
<span style="white-space:pre"> </span>do
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>SendMsg(enMsgCreateGameWinLayer,sizeof(NULL));
<span style="white-space:pre"> </span>return true;
<span style="white-space:pre"> </span>} while (false);
<span style="white-space:pre"> </span>CCLog("Fun CNF3DWorldLayer::OnSubMsgGameWin Error!");
<span style="white-space:pre"> </span>return false;
}
个人博客 www.sundaboke.com
原文链接:/cocos2dx/345930.html