大佬教程收集整理的这篇文章主要介绍了cocos2dx游戏只关卡开发,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
小伙伴们今天晚上我要给大家讲讲cocos2dx之关卡开发,这里自己先看代码我里面写的很清楚了不懂的可以留言问我 我后续还有说明时间紧迫我暂时就不多写了,下次我在重点讲解
#ifndef __MISSIONUI_HEADER__
#define __MISSIONUI_HEADER__
#include <typedef.hpp>
#include <cocos-base.h>
#include <cocos-widget.h>
#include <ScreenUtil.hpp>
#include <CMisc.hpp>
#include <Facade.hpp>
#include <Language.hpp>
#include <TextButton.hpp>
#include <MissionDialogUi.hpp>
CLIENT_NS_BEGIN;
USING_NS_Cc;
using namespace cocos2d::cocoswidget;
//关卡UI
enum MissionUiBtn
{
tagTurnBACk,tagStageNormal,tagStageElite,tagStageTeam,tagTurnLeft,tagTurnRight,tagShowDialog
};//Button tag
//todo
struct MissionData
{
int id;
int star;
int result;
};
// enum MissionType
// {
// MISSION_TYPE_NORMAL,
// MISSION_TYPE_HARD,
// MISSION_TYPE_GUILD,
//
// MISSION_TYPE_MAX
// };//关卡类型枚举
class CustomsPassUi : public CSceneExtension
{
public:
CREATE_SCENE_FUNC(CustomsPassUi)
CustomsPassUi();
virtual ~CustomsPassUi();
virtual void onLoadresources();
virtual void onLoadresourcesCompleted();
virtual void onLoadScene();
virtual void onEnterScene();
virtual void onExitScene();
void onLoadChild();
void caseClick();
void arrowClick(int i_arrowTypE);
protected:
private:
CC_SYNTHESIZE(int,n_xMissionType,MissionTypE);
//pageIndex
int curTindex;
// PageView Contener
CWidgetWindow* m_pWindow;
//ScollView BACkground 's textrue
Texture2D *scollTexture;
CC_SYNTHESIZE_READONLY(cocoswidget::CPageView*,m_pMissionScrView,MissionPagE);
//关卡SollView背景图
CC_SYNTHESIZE_READONLY(CCSprite*,m_pScollViewBg,ScollViewBg);
//返回
CC_SYNTHESIZE_READONLY(cocoswidget::CButton*,m_pMissionBACkBtn,MissionBACk);
// 精英
CC_SYNTHESIZE_READONLY(TextButton*,m_pEliteBtn,MissionElitE);
//普通
CC_SYNTHESIZE_READONLY(TextButton*,m_pNormalBtn,MissionNormal);
//TeamButton
CC_SYNTHESIZE_READONLY(TextButton*,m_pMissionTeam,MissionTeam);
//TurnLeft
CC_SYNTHESIZE_READONLY(cocoswidget::CButton*,m_pTurnLeft,MissionLeft);
//Turn Right
CC_SYNTHESIZE_READONLY(cocoswidget::CButton*,m_pTurnRight,MissionRight);
private:
Ref* pageviewDatasource(Ref* pConvertCell,unsigned int nPagEIDX);
void onPageChanged(Ref* pObject,unsigned int nPageIndX);
void showDialogBACk(CCObject* pSender);
};
APP_NS_END
#endif __MISSIONUI_HEADER__
#include "MissionUi.hpp"
#include <MissionMediator.hpp>
#include <Scale9Sprite.h>
CLIENT_NS_BEGIN
CustomsPassUi::CustomsPassUi() :
m_pScollViewBg(nullptr),m_pMissionScrView(nullptr),m_pMissionBACkBtn(nullptr),m_pEliteBtn(nullptr),m_pNormalBtn(nullptr),n_xMissionType(1),curTindex(0)
{
setCachable(true);
setAutoRemoveUnusedTexture(true);
}
CustomsPassUi::~CustomsPassUi()
{
}
void CustomsPassUi::onLoadresources()
{
addImageAsync("Common/bg.jpg");
addImageAsync("MissionUi/stage-map-elite-frame.jpg");
addImageAsync("MissionUi/stage-map-elite-frame_alpha_mask.png");
addImageAsync("MissionUi/stage-map-frame.jpg");
addImageAsync("MissionUi/stage-map-frame_alpha_mask.png");
addImageAsync("MissionUi/stageSELEct_map_bg_1.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_2.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_3.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_4.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_5.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_6.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_7.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_8.jpg");
addImageAsync("MissionUi/stageSELEct_map_bg_9.jpg");
addImageAsync("MissionUi/BACk_normal.png");
addImageAsync("MissionUi/BACk_SELEted.png");
addImageAsync("MissionUi/button_normal.png");
addImageAsync("MissionUi/button_SELEcted.png");
addImageAsync("MissionUi/nextbtn.jpg");
addImageAsync("MissionUi/nextbtn_alpha_mask.png");
}
void CustomsPassUi::onLoadresourcesCompleted()
{
}
void CustomsPassUi::onLoadScene()
{
this->removeAllChildrenWithCleanup(true);
onLoadChild();
}
void CustomsPassUi::caseClick()
{
//scollView的背景图
switch (n_xMissionTypE)
{
case 1:
{
// normal Textrue
scollTexture = getNewTexture("MissionUi/stage-map-frame.jpg","MissionUi/stage-map-frame_alpha_mask.png");
}
break;
case 2:
{
// elite Textrue
scollTexture = getNewTexture("MissionUi/stage-map-elite-frame.jpg","MissionUi/stage-map-elite-frame_alpha_mask.png");
}
break;
case 3:
{
// Team Textrue
}
break;
default:
break;
}
}
void CustomsPassUi::onLoadChild()
{
caseClick();
//背景图
CCSprite *bg = CCSprite::create("Common/bg.jpg");
bg->setPosition(ScreenUtil::getCenter());
addChild(bg);
if (scollTexture!=nullptr)
{
m_pScollViewBg = Sprite::createWithTexture(scollTexturE);
m_pScollViewBg->setAnchorPoint(Vec2(0.5,0));
m_pScollViewBg->setPosition(Vec2(480,20));
addChild(m_pScollViewBg);
}
//返回按钮
m_pMissionBACkBtn = cocoswidget::CButton::create("MissionUi/BACk_normal.png","MissionUi/BACk_SELEted.png");
getMissionBACk()->setAnchorPoint(ccp(0,0));
//getBagBACk()->setScale(0.8f);
getMissionBACk()->setPosition(ccp(60,570));
getMissionBACk()->setTag(tagTurnBACk);
this->addChild(getMissionBACk());
//普通按钮
m_pNormalBtn = TextButton::create(LANGUAGE_VALUE("Mission_Normal"),"MissionUi/button_normal.png","MissionUi/button_SELEcted.png");
getMissionNormal()->setPosition(Vec2(480 - 100,550));
getMissionNormal()->setTag(tagStageNormal);
addChild(getMissionNormal());
//精英按钮
m_pEliteBtn = TextButton::create(LANGUAGE_VALUE("Mission_Elit"),"MissionUi/button_SELEcted.png");
getMissionElite()->setPosition(Vec2(480 + 130,550));
getMissionElite()->setTag(tagStageElitE);
addChild(getMissionElite());
//TeamButton
m_pMissionTeam = TextButton::create(LANGUAGE_VALUE("Mission_Team"),"MissionUi/button_SELEcted.png");
getMissionTeam()->setPosition(Vec2(480 + 390,550));
getMissionTeam()->setTag(tagStageTeam);
addChild(getMissionTeam());
//Turn left
m_pTurnLeft = cocoswidget::CButton::create("MissionUi/nextbtn.jpg","MissionUi/nextbtn_alpha_mask.png");
getMissionLeft()->setPosition(Vec2(20,320));
getMissionLeft()->setTag(tagTurnLeft);
addChild(getMissionLeft(),1);
//Turn Right
m_pTurnRight = cocoswidget::CButton::create("MissionUi/nextbtn.jpg","MissionUi/nextbtn_alpha_mask.png");
getMissionRight()->setPosition(Vec2(960 - 30,320));
getMissionRight()->setTag(tagTurnRight);
addChild(getMissionRight(),1);
m_pWindow = CWidgetWindow::create();
m_pWindow->setMultiTouchEnabled(true);
m_pWindow->setAnchorPoint(ccp(0,0));
m_pWindow->setPosition(Vec2(10,30));
addChild(m_pWindow,1);
//ScollView
m_pMissionScrView = CPageView::create(
Size(910,470),9,this,ccw_datasource_adapter_SELEctor(CustomsPassUi::pageviewDatasourcE));
m_pMissionScrView->setOnPageChangedListener(this,ccw_pagechanged_SELEctor(CustomsPassUi::onPageChanged));
m_pMissionScrView->setAnchorPoint(ccp(0,0));
m_pMissionScrView->setPosition(Vec2(20,30));
m_pMissionScrView->setEnabled(true);
m_pMissionScrView->setDirection(eScrollViewDirectionHorizontal);
m_pWindow->addChild(m_pMissionScrView);
m_pMissionScrView->reloadData();
}
void CustomsPassUi::onEnterScene()
{
g_facade.sendNotification(FRAME_messaGE_ENTER_MISSION_UI);
}
void CustomsPassUi::onExitScene()
{
// g_facade.sendNotification(FRAME_messaGE_EXIT_MISSION_UI);
}
Ref* CustomsPassUi::pageviewDatasource(Ref* pConvertCell,unsigned int nPagEIDX)
{
CPageViewCell* pPageCell = (CPageViewCell*)pConvertCell;
char pictruename[40];
sprintf(pictruename,"MissionUi/stageSELEct_map_bg_%d.jpg",nPagEIDx + 1);
CButton* m_pShowDialog = nullptr;
Sprite* pageViewBg = nullptr;
if (!pPageCell)
{
pPageCell = new CPageViewCell();
pPageCell->autorelease();
m_pShowDialog = CButton::create("MissionUi/nextbtn.jpg","MissionUi/nextbtn_alpha_mask.png");
m_pShowDialog->setOnClickListener(this,ccw_click_SELEctor(@H_270_150@missionMediator::onClickBtn));
m_pShowDialog->setPosition(200,250);
m_pShowDialog->setTag(tagShowDialog);
pPageCell->addChild(m_pShowDialog);
pageViewBg = Sprite::create();
pageViewBg->setPosition(Vec2(455,235));
pageViewBg->setTag(100001);
pPageCell->addChild(pageViewBg);
}
else
{
m_pShowDialog = (CButton*)pPageCell->getChildByTag(tagShowDialog);
pageViewBg = (Sprite*)pPageCell->getChildByTag(100001);
}
pageViewBg->setTexture(pictrueName);
return pPageCell;
}
void CustomsPassUi::onPageChanged(Ref* pObject,unsigned int nPageIndX)
{
//pageIndex = nPageIndx;
}
void CustomsPassUi::arrowClick(int i_arrowTypE)
{
CCLog("=============click LEft=======");
if (i_arrowType == 1)
{
//向左
if (curTindex == 0)
{
this->removeChildByTag(tagTurnLeft);
}
else
{
curTindex -= 1;
m_pTurnRight = cocoswidget::CButton::create("MissionUi/nextbtn.jpg","MissionUi/nextbtn_alpha_mask.png");
getMissionRight()->setPosition(Vec2(960 - 30,320));
getMissionRight()->setTag(tagTurnRight);
addChild(getMissionRight(),1);
m_pMissionScrView->setContentOffsetEaseIn(Vec2(curTindex * 910,0),0.05,0.5);
}
}
else if (i_arrowType == 2)
{
//向右
CCLog("=============Click right======");
if (curTindex == 8)
{
this->removeChildByTag(tagTurnRight);
}
else
{
curTindex += 1;
m_pTurnLeft = cocoswidget::CButton::create("MissionUi/nextbtn.jpg","MissionUi/nextbtn_alpha_mask.png");
getMissionLeft()->setPosition(Vec2(20,320));
getMissionLeft()->setTag(tagTurnLeft);
addChild(getMissionLeft(),1);
getMissionPage()->setContentOffsetEaseIn(Vec2(-(curTindex * 910),0.5);
}
}
}
APP_NS_END
#include <ScreenUtil.hpp>
#include <Language.hpp>
#include <CMisc.hpp>
#include <Facade.hpp>
USING_NS_CC;
CLIENT_NS_BEGIN
using namespace cocoswidget;
enum DialogBtn
{
tagStageBACk,tagStageFight
};
class CustomsPassDialogUi : public CSceneExtension { public: CREATE_SCENE_FUNC@H_938_675@(CustomsPassDialogUi); CustomsPassDialogUi@H_938_675@(); ~CustomsPassDialogUi@H_938_675@(); virtual void onLoadresources@H_938_675@(); virtual void onLoadresourcesCompleted@H_938_675@(); virtual void onLoadScene@H_938_675@(); virtual void onEnterScene@H_938_675@(); virtual void onExitScene@H_938_675@(); private: void initDialog@H_938_675@(); private: CC_SYNTHESIZE_READONLY@H_938_675@(int,n_pMissionID,@H_350_656@missionID); //调用的关卡ID CC_SYNTHESIZE_READONLY@H_938_675@(int,n_pMissionType,@H_350_656@missionDialogType);//调用关卡类型 CC_SYNTHESIZE_READONLY@H_938_675@(Sprite*,@H_988_660@m_pBACkPictrue,BACkPictrue); //地图图片 CC_SYNTHESIZE_READONLY@H_938_675@(Texture2D*,@H_988_660@m_pFrameTextrue,FrameTexture); //弹窗背景Texture CC_SYNTHESIZE_READONLY@H_938_675@(Sprite*,@H_988_660@m_pBg,Bg); //弹框背景 CC_SYNTHESIZE_READONLY@H_938_675@(Sprite*,@H_988_660@m_pStar,Star); //星星 CC_SYNTHESIZE_READONLY@H_938_675@(cocoswidget::CButton*,@H_988_660@m_pBACk,CallBACkBtn); //返回按钮 CC_SYNTHESIZE_READONLY@H_938_675@(cocoswidget::CButton*,@H_988_660@m_pFightBtn,GoFightBtn); //战斗按钮 CC_SYNTHESIZE_READONLY@H_938_675@(cocoswidget::CLabel*,@H_988_660@m_ptitle,Labeltitle); //该关卡名字 CC_SYNTHESIZE_READONLY@H_938_675@(cocoswidget::CLabel*,@H_988_660@m_pDes,LabelDes); //描述该关卡 CC_SYNTHESIZE_READONLY@H_938_675@(cocoswidget::CLabel*,@H_988_660@m_pConsume,LabelConsume);//体力消耗数值 // todo 敌方阵容....可能获得...图片显示 }; APP_NS_END #endif
#include "MissionDialogUi.hpp"
#include <XmlConfig.hpp>
CLIENT_NS_BEGIN
CustomsPassDialogUi::CustomsPassDialogUi()
{
setCachable(true);
//setAutoRemoveUnusedTexture(true);
}
CustomsPassDialogUi::~CustomsPassDialogUi()
{
}
void CustomsPassDialogUi::onLoadresources()
{
addImageAsync("MissionUi/stage-map-frame.jpg");
addImageAsync("MissionUi/stage-map-frame_alpha_mask.png");
addImageAsync("MissionUi/star-disabled.jpg");
addImageAsync("MissionUi/star-disabled_alpha_mask.png");
addImageAsync("MissionUi/star.jpg");
addImageAsync("MissionUi/star_alpha_mask.png");
addImageAsync("MissionUi/BACk_normal.png");
addImageAsync("MissionUi/BACk_SELEted.png");
addImageAsync("MissionUi/resume_battle.jpg");
addImageAsync("MissionUi/resume_battle_alpha_mask.png");
addImageAsync("MissionUi/resume_battle_press.jpg");
addImageAsync("MissionUi/resume_battle_press_alpha_mask.png");
}
void CustomsPassDialogUi::onLoadresourcesCompleted()
{
}
void CustomsPassDialogUi::onLoadScene()
{
initDialog();
}
// @param关卡ID,类型
void CustomsPassDialogUi::initDialog()
{
m_pBACkPictrue = Sprite::create("MissionUi/stageSELEct_map_bg_1.jpg");
m_pBACkPictrue->setAnchorPoint(ccp(0,0));
m_pBACkPictrue->setPosition(ccp(20,20));
m_pBACkPictrue->setOpacity(40);
addChild(m_pBACkPictruE);
m_pFrameTextrue = getNewTexture("MissionUi/stage-map-frame.jpg","MissionUi/stage-map-frame_alpha_mask.png");
m_pBg = Sprite::createWithTexture(m_pFrameTextruE);
m_pBg->setAnchorPoint(ccp(0,0));
/* m_pBg->setOpacity(100);*/
m_pBg->setPosition(ccp(20,20));
addChild(m_pBg);
//关卡名字
m_ptitle = CLabel::create();
getLabeltitle()->setString("");
getLabeltitle()->setColor(Color3B(227,207,87));
getLabeltitle()->setPosition(ccp(300,480));
addChild(getLabeltitle());
//关卡描述
m_pDes = CLabel::create();
getLabelDes()->setString("");
getLabelDes()->setColor(Color3B(255,255,255));
getLabelDes()->setPosition(100,450);
addChild(getLabelDes());
//星星
auto disStarTexture = getNewTexture("MissionUi/star-disabled.jpg","MissionUi/star-disabled_alpha_mask.png");
auto starTexture = getNewTexture("MissionUi/star.jpg","MissionUi/star_alpha_mask.png");
for (int i = 0; i < 3; i++)
{
m_pStar = Sprite::createWithTexture(disStarTexturE);
getStar()->setAnchorPoint(ccp(0.5,0));
getStar()->setPosition(ccp(450 + i * 100,500));
addChild(getStar());
}
//体力消耗
auto strengDes = CLabel::create();
strengDes->setString(LANGUAGE_VALUE("MissionDialog_cosStr"));
strengDes->setColor(Color3B(255,277,132));
strengDes->setPosition(ccp(100,350));
addChild(strengDes);
//体力消耗数值
m_pConsume = CLabel::create();
getLabelConsume()->setString("");
getLabelConsume()->setColor(Color3B(227,87));
getLabelConsume()->setPosition(ccp(130,350));
addChild(getLabelConsume());
//体力图片
//敌方阵容
auto enmeyLable = CLabel::create();
enmeyLable->setString(LANGUAGE_VALUE("MissionDialog_EnemyArr"));
enmeyLable->setColor(Color3B(255,132));
enmeyLable->setPosition(ccp(130,320));
addChild(enmeyLablE);
//可能获得
auto gainLable = CLabel::create();
gainLable->setString(LANGUAGE_VALUE("MissionDialog_gain"));
gainLable->setColor(Color3B(255,132));
gainLable->setPosition(ccp(130,300));
addChild(gainLablE);
//返回按钮
m_pBACk = CButton::create("MissionUi/BACk_normal.png","MissionUi/BACk_SELEted.png");
m_pBACk->setPosition(ccp(100,540));
getCallBACkBtn()->setTag(tagStageBACk);
addChild(m_pBACk);
//去战斗按钮
auto normalTextrue = getNewTexture("MissionUi/resume_battle.jpg","MissionUi/resume_battle_alpha_mask.png");
auto secletTextrue = getNewTexture("MissionUi/resume_battle_press.jpg","MissionUi/resume_battle_press_alpha_mask.png");
m_pFightBtn = CButton::create();
m_pFightBtn->setNormalTexture(normalTextruE);
m_pFightBtn->setSELEctedTexture(secletTextruE);
m_pFightBtn->setPosition(620,100);
getGoFightBtn()->setTag(tagStageFight);
addChild(m_pFightBtn);
}
void CustomsPassDialogUi::onEnterScene()
{
g_facade.sendNotification(FRAME_messaGE_ENTER_MISSIONDIALOG_UI);
}
void CustomsPassDialogUi::onExitScene()
{
}
APP_NS_END
#ifndef __MISSION_MEDIATOR_HEADER__
#define __MISSION_MEDIATOR_HEADER__
#include <typedef.hpp>
#include <Mediator.hpp>
#include "MissionUi.hpp"
CLIENT_NS_BEGIN
USING_NS_Cc;
struct MissionInfomation :
public Ref
{
int MissionInfoId;
int MissionInfoType;
int MissionInfoStar;
MissionInfomation()
{
this->autorelease();
}
};
class CustomsPassMediator : public Mediator
{
public:
CustomsPassMediator();
virtual ~CustomsPassMediator();
virtual void onRegisterNotification();
virtual void handleNotification(Notification* pNotification);
virtual void update();
virtual std::String getMediatorName(){ return "MissionMediator"; }
friend class MissionUi;
private:
CC_SYNTHESIZE_READONLY(MissionUi*,m_pMissionUi,MissionUi);
CC_SYNTHESIZE(int,n_CurMissionId,CurMissionId);
CC_SYNTHESIZE(int,n_CurMissionType,CurMissionTypE);
CC_SYNTHESIZE(int,n_CurMissionStar,CurMissionStar);
void onClickBtn(CCObject* pObject);
};
APP_NS_END
#endif
include "MissionMediator.hpp"
#include <Facade.hpp>
CLIENT_NS_BEGIN
CustomsPassMediator::CustomsPassMediator() :m_pMissionUi(nullptr)
{
REGISTER_SCENE_FUNC(MissionUi);
}
CustomsPassMediator::~CustomsPassMediator()
{
}
void CustomsPassMediator::onRegisterNotification()
{
m_xFramemessageVec.push_BACk(FRAME_messaGE_SHOW_MISSION_UI);
m_xFramemessageVec.push_BACk(FRAME_messaGE_ENTER_MISSION_UI);
m_xFramemessageVec.push_BACk(FRAME_messaGE_EXIT_MISSION_UI);
}
void CustomsPassMediator::handleNotification(Notification* pNotification)
{
if (NULL == pNotification)
{
return;
}
switch (pNotification->m_xmessagE)
{
case FRAME_messaGE_SHOW_MISSION_UI:
{
m_pMissionUi = (MissionUi*)LoadScene("MissionUi");
CSceneManager::geTinstance()->replaceScene(m_pMissionUi);
}
break;
case FRAME_messaGE_ENTER_MISSION_UI:
{
//返回按钮
getMissionUi()->getMissionBACk()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassMediator::onClickBtn));
//普通按钮
getMissionUi()->getMissionNormal()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassMediator::onClickBtn));
//精英按钮
getMissionUi()->getMissionElite()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassMediator::onClickBtn));
//团队按钮
getMissionUi()->getMissionTeam()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassMediator::onClickBtn));
//向左按钮
getMissionUi()->getMissionLeft()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassMediator::onClickBtn));
//向右按钮
getMissionUi()->getMissionRight()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassMediator::onClickBtn));
}
break;
case FRAME_messaGE_EXIT_MISSION_UI:
{
g_facade.sendNotification(FRAME_messaGE_SHOW_MAIN_UI);
/*CSceneManager::geTinstance()->popScene(m_pMissionUi);*/
}
break;
}
}
void CustomsPassMediator::update()
{
}
void CustomsPassMediator::onClickBtn(CCObject* pObject)
{
MissionInfomation* pMissionInfomation = nullptr;
auto pButton = (CButton*)pObject;
switch (pButton->getTag())
{
case tagTurnBACk:
{
CCLog("tag Mission BACk");
g_facade.sendNotification(FRAME_messaGE_EXIT_MISSION_UI);
//g_facade.sendNotification(FRAME_messaGE_SHOW_MAIN_UI);
}
break;
case tagStageNormal:
{
CCLog("tag Mission Normal");
getMissionUi()->setMissionType(1);
setCurMissionType(1);
getMissionUi()->onLoadChild();
}
break;
case tagStageElite:
{
CCLog("tag Mission Elite");
getMissionUi()->setMissionType(2);
setCurMissionType(2);
getMissionUi()->onLoadChild();
}
break;
case tagStageTeam:
{
CCLog("tag Mission Team");
getMissionUi()->setMissionType(3);
setCurMissionType(3);
getMissionUi()->onLoadChild();
}
break;
case tagTurnLeft:
{
CCLog("tag Turn left");
getMissionUi()->arrowClick(1);
}
break;
case tagTurnRight:
{
CCLog("tag Turn Left");
getMissionUi()->arrowClick(2);
}
break;
case tagShowDialog:
{
CCLog("show Mission Dialog ");
/*
test,sendNotification to Dialog,pack this strcut,this ID should get from the MissionUI,this is a test.
*/
setCurMissionId(600001);
pMissionInfomation = new MissionInfomation();
pMissionInfomation->MissionInfoId = getCurMissionId();
pMissionInfomation->MissionInfoType = 1;
g_facade.sendNotification(FRAME_messaGE_SHOW_MISSIONDIALOG_UI);
}
break;
}
}
APP_NS_END
#ifndef __MISSIONDIALOG_MEDIATOR_HEADER__
#define __MISSIONDIALOG_MEDIATOR_HEADER__
#include <typedef.hpp>
#include <Mediator.hpp>
#include "MissionDialogUi.hpp"
#include <MissionProxy.hpp>
CLIENT_NS_BEGIN
USING_NS_Cc;
struct Data
{
int dataId;
int dataType;
};
class CustomsPassDialogMediator : public Mediator
{
public:
CustomsPassDialogMediator();
virtual ~CustomsPassDialogMediator();
virtual void onRegisterNotification();
virtual void handleNotification(Notification* pNotification);
virtual void update();
virtual std::String getMediatorName(){ return "MissionDialogMediator"; }
friend class CustomsPassUi;
private:
CC_SYNTHESIZE_READONLY(MissionDialogUi*,m_pMissionDialogUi,MissionDialogUi);
void onClickBtn(CCObject* pObject);
MissionProxy *pMissionProxy;
};
APP_NS_END
#endif
#include "MissionDialogMediator.hpp"
#include "MissionMediator.hpp"
CLIENT_NS_BEGIN
CustomsPassDialogMediator::CustomsPassDialogMediator()
{
REGISTER_SCENE_FUNC(MissionDialogUi);
pMissionProxy = (MissionProxy*)g_facade.retrieveProxy("MissionProxy");
}
CustomsPassDialogMediator::~CustomsPassDialogMediator()
{
}
void CustomsPassDialogMediator::onRegisterNotification()
{
m_xFramemessageVec.push_BACk(FRAME_messaGE_SHOW_MISSIONDIALOG_UI);
m_xFramemessageVec.push_BACk(FRAME_messaGE_ENTER_MISSIONDIALOG_UI);
m_xFramemessageVec.push_BACk(FRAME_messaGE_EXIT_MISSIONDIALOG_UI);
}
void CustomsPassDialogMediator::handleNotification(Notification* pNotification)
{
if (NULL == pNotification)
{
return;
}
switch (pNotification->m_xmessagE)
{
case FRAME_messaGE_SHOW_MISSIONDIALOG_UI:
{
//int id = ((MissionInfomation*)pNotification->m_pBody)->@H_680_5@missionInfoId;
m_pMissionDialogUi = (MissionDialogUi*)LoadScene("MissionDialogUi");
CSceneManager::geTinstance()->pushScene(m_pMissionDialogUi);
}
break;
case FRAME_messaGE_ENTER_MISSIONDIALOG_UI:
{
if (pMissionProxy == nullptr)
{
return;
}
else
{
//test information
MissionTrunkVo *_CurMapInfo = pMissionProxy->getMapInfo(41010101);
std::string s = _CurMapInfo->getMapName();
getMissionDialogUi()->getLabelDes()->setString(s);
}
getMissionDialogUi()->getCallBACkBtn()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassDialogMediator::onClickBtn));
getMissionDialogUi()->getGoFightBtn()->setOnClickListener(this,ccw_click_SELEctor(CustomsPassDialogMediator::onClickBtn));
}
break;
case FRAME_messaGE_EXIT_MISSIONDIALOG_UI:
{
CSceneManager::geTinstance()->popScene(m_pMissionDialogUi);
}
break;
}
}
void CustomsPassDialogMediator::update()
{
}
void CustomsPassDialogMediator::onClickBtn(CCObject* pObject)
{
int nTag = ((cocoswidget::CButton*)pObject)->getTag();
switch (nTag)
{
case tagStageBACk:
{
CCLog(" tag MissionDialog BACk");
g_facade.sendNotification(FRAME_messaGE_EXIT_MISSIONDIALOG_UI);
}
break;
case tagStageFight:
{
CCLog("tag MissionDialog Fight");
if (nullptr == pMissionProxy)
{
return;
}
pMissionProxy->onMission(201110243,2,1);
}
break;
}
}
APP_NS_END
接下来这部分就是客户端向服务端发送消息,意思就是当我通过关卡以后我要去告诉服务端那边玩家是否打过 打过了该怎么怎么样,没打过该怎么这么样
#ifndef __MISSION_PROXY_HEADER__
#define __MISSION_PROXY_HEADER__
#include <typedef.hpp>
#include <Proxy.hpp>
#include <MissionVo.hpp>
#include <Character.hpp>
CLIENT_NS_BEGIN
USING_NS_Cc;
class CustomsPassProxy :
public Proxy
{
public:
CustomsPassProxy();
~CustomsPassProxy();
virtual void onInitilize();
virtual void onRegistermessage();
virtual std::String getProxyName(){ return "MissionProxy"; }
void onMission(int id,int mission_type,int star);
void handleMissionAgentTokenAck(message::Ptr& pmessagE);
// Get this mapId's information
MissionTrunkVo* getMapInfo(int mapId);
//get this node's information
MissionBranchVo* getNodeInfo(int nodEID);
//get this NodEID ' enmey information
MissionArrayVo* getCurEnemyInfo(int nodEID);
private:
void loadTrunkInfo();
void loadBranchInfo();
void loadArrayInfo();
private:
CC_SYNTHESIZE(CCDictionary*,m_pTrunkInfo,TrunkInfo);
CC_SYNTHESIZE(CCDictionary*,m_pBranchInfo,BranchInfo);
CC_SYNTHESIZE(CCDictionary*,m_pEnmeyArrInfo,EnmeyArrInfo);
};
APP_NS_END
#endif
#include <MissionProxy.hpp>
#include <Tinyxml2/Tinyxml2.h>
#include <AgentServer/Mission.hpp>
#include <Alert.hpp>
#include <Facade.hpp>
#include <NetDelegate.hpp>
CLIENT_NS_BEGIN
CustomsPassProxy::CustomsPassProxy()
{
m_pTrunkInfo = CCDictionary::create();
m_pTrunkInfo->retain();
m_pBranchInfo = CCDictionary::create();
m_pBranchInfo->retain();
m_pEnmeyArrInfo = CCDictionary::create();
m_pEnmeyArrInfo->retain();
}
CustomsPassProxy::~CustomsPassProxy()
{
}
void CustomsPassProxy::onInitilize()
{
loadTrunkInfo();
loadBranchInfo();
loadArrayInfo();
}
void CustomsPassProxy::onRegistermessage()
{
DEFREG_messaGE(ID_GS2C_EnterMissionAck,CustomsPassProxy,handleMissionAgentTokenAck)
}
void CustomsPassProxy::handleMissionAgentTokenAck(message::Ptr & pmessagE)
{
GS2C_EnterMissionAck missionAgentTokenAck;
pmessage->unpack(missionAgentTokenAck);
if (missionAgentTokenAck.Result == 1 )
{
@H_350_656@missionInfoVec xMissionInfoVec;
StageInfoVec::iterator iter = missionAgentTokenAck.StageInfo.begin();
StageInfoVec::iterator end = missionAgentTokenAck.StageInfo.end();
for (; iter != end;++iter)
{
@H_350_656@missionInfo xMissionInfo;
xMissionInfo.@H_350_656@missionId = iter->@H_350_656@missionSqlId;
xMissionInfo.@H_350_656@missionType = iter->@H_350_656@missionSqlType;
xMissionInfo.@H_350_656@missionStar = iter->@H_350_656@missionSqlStar;
xMissionInfo.@H_350_656@missionCount = iter->@H_350_656@missionSqlCount;
xMissionInfo.@H_350_656@missionResetCount = iter->@H_350_656@missionSqlResetCount;
xMissionInfo.@H_350_656@missionDilayChALLENge = iter->@H_350_656@missionSqlDilayChALLENge;
xMissionInfoVec.push_BACk(xMissionInfo);
}
g_character.setMissionInfoVec(xMissionInfoVec);
}
else
{
return;
}
}
void CustomsPassProxy::onMission(int id,int mission_type,int star)
{
message::Ptr sendMsg(new message());
C2GS_MissionReq missionAgentTokenReq;
missionAgentTokenReq.@H_350_656@missionToID = id;
missionAgentTokenReq.@H_350_656@missionToType = mission_type;
missionAgentTokenReq.@H_350_656@missionToStar = star;
missionAgentTokenReq.@H_350_656@missionToCount = 2;
missionAgentTokenReq.@H_350_656@missionToResetCount = 1;
missionAgentTokenReq.@H_350_656@missionToDilayChALLENge = 3;
sendMsg->pack(missionAgentTokenReq);
g_netDelegate.send(sendMsg);
}
//地图读取
void CustomsPassProxy::loadTrunkInfo()
{
ssize_t bufferSize = 0;
unsigned char* pBuffer = CCFileUtils::sharedFileUtils()->getFileData("MissionData.xml","r",&bufferSizE);
if (NULL == pBuffer)
{
return;
}
Tinyxml2::XMLDocument* pXml = new Tinyxml2::XMLDocument();
pXml->Parse((const char*)pBuffer);
Tinyxml2::XMLElement* pNode = pXml->RootElement()->FirstChildElement();
@H_350_656@missionTrunkVo* pMissionTrunkVo = nullptr;
while (pNodE)
{
pMissionTrunkVo = new @H_350_656@missionTrunkVo();
pMissionTrunkVo->setMapId(pNode->IntAttribute("MapId")); // 地图Id
pMissionTrunkVo->setMapName(pNode->Attribute("MapName")); //地图名字
pMissionTrunkVo->setMapresource(pNode->Attribute("Mapresource")); //地图资源
pMissionTrunkVo->setMapType(pNode->IntAttribute("MapType")); //地图类型
pMissionTrunkVo->setLimitLevel(pNode->IntAttribute("LimitLevel")); //等级限制
pMissionTrunkVo->setLimitTime(pNode->IntAttribute("LimitTime")); //时间限制
pMissionTrunkVo->setLimitType(pNode->IntAttribute("LimitType")); //限制条件
pMissionTrunkVo->setLimitCon(pNode->IntAttribute("LimitCon")); //限制条件参数
pMissionTrunkVo->setLastId(pNode->IntAttribute("LastId")); //前置要求
pMissionTrunkVo->autorelease();
m_pTrunkInfo->setObject(pMissionTrunkVo,pMissionTrunkVo->getMapId());
pNode = pNode->NextSiblingElement();
}
}
//节点读取
void CustomsPassProxy::loadBranchInfo()
{
ssize_t bufferSize = 0;
unsigned char* pBuffer = CCFileUtils::sharedFileUtils()->getFileData("NodeData.xml",&bufferSizE);
if (NULL == pBuffer)
{
return;
}
Tinyxml2::XMLDocument* pXml = new Tinyxml2::XMLDocument();
pXml->Parse((const char*)pBuffer);
Tinyxml2::XMLElement* pNode = pXml->RootElement()->FirstChildElement();
@H_350_656@missionBranchVo* pMissionBranchVo = nullptr;
while (pNodE)
{
pMissionBranchVo = new @H_350_656@missionBranchVo();
pMissionBranchVo->setBranchId(pNode->IntAttribute("NodEID")); // 节点Id
pMissionBranchVo->setNodename(pNode->Attribute("Nodename")); //节点名字
pMissionBranchVo->setNoderesource(pNode->Attribute("Noderesource")); //图片资源
pMissionBranchVo->setNodeMap(pNode->Attribute("NodeMap")); //所属地图
pMissionBranchVo->setNodeImage(pNode->Attribute("NodeImage")); //背景地图
pMissionBranchVo->setFrontId(pNode->IntAttribute("FrontId")); //前置节点
pMissionBranchVo->setNodeLevel(pNode->IntAttribute("NodeLevel")); //需要等级
pMissionBranchVo->setNeedStr(pNode->IntAttribute("NeedStr")); //体力消耗
pMissionBranchVo->setLimitCou(pNode->IntAttribute("LimitCou")); //次数限制
pMissionBranchVo->setNodeCion(pNode->IntAttribute("NodeCion")); //金币产出
pMissionBranchVo->setNodeExp(pNode->IntAttribute("NodeExp")); //角色经验产出
pMissionBranchVo->setNodeHeroExp(pNode->IntAttribute("NodeHeroExp")); //英雄经验产出
pMissionBranchVo->setDropType(pNode->IntAttribute("DropType")); //掉落类型
pMissionBranchVo->setDropId(pNode->IntAttribute("DropId")); //掉落ID
pMissionBranchVo->setDropNum(pNode->IntAttribute("DropNum")); //掉落数量
pMissionBranchVo->setNodeDec(pNode->Attribute("NodeDec")); //节点描述
pMissionBranchVo->setNodeOrderId(pNode->IntAttribute("NodeOrderId")); //节点阵容ID
pMissionBranchVo->setTeamDiff1(pNode->IntAttribute("TeamDiff1")); //阵容难度1
pMissionBranchVo->setTeamDiff2(pNode->IntAttribute("TeamDiff2")); //阵容难度2
pMissionBranchVo->setTeamDiff3(pNode->IntAttribute("TeamDiff3")); //阵容难度3
pMissionBranchVo->setTeamDiff4(pNode->IntAttribute("TeamDiff4")); //阵容难度4
pMissionBranchVo->setTeamDiff5(pNode->IntAttribute("TeamDiff15")); //阵容难度5
pMissionBranchVo->setCopyDrop1(pNode->IntAttribute("CopyDrop1")); //副本掉落1
pMissionBranchVo->setCopyPro1(pNode->IntAttribute("CopyPro1")); //概率1
pMissionBranchVo->setCopyDrop2(pNode->IntAttribute("CopyDrop2")); //副本掉落2
pMissionBranchVo->setCopyPro2(pNode->IntAttribute("CopyPro2")); //概率2
pMissionBranchVo->setCopyDrop3(pNode->IntAttribute("CopyDrop3")); //副本掉落3
pMissionBranchVo->setCopyPro3(pNode->IntAttribute("CopyPro3")); //概率3
pMissionBranchVo->setCopyDrop4(pNode->IntAttribute("CopyDrop4")); //副本掉落4
pMissionBranchVo->setCopyPro4(pNode->IntAttribute("CopyPro4")); //概率4
pMissionBranchVo->setCopyDrop5(pNode->IntAttribute("CopyDrop5")); //副本掉落5
pMissionBranchVo->setCopyPro5(pNode->IntAttribute("CopyPro5")); //概率5
pMissionBranchVo->setWipeDrop1(pNode->IntAttribute("WipeDrop1")); //扫荡掉落1
pMissionBranchVo->setWipeNum1(pNode->IntAttribute("WipeNum1")); //扫荡掉落数量1
pMissionBranchVo->setWipeDrop2(pNode->IntAttribute("WipeDrop2")); //扫荡掉落2
pMissionBranchVo->setWipeNum2(pNode->IntAttribute("WipeNum2")); //扫荡掉落数量2
pMissionBranchVo->setAdjustRatio(pNode->IntAttribute("AdjustRatio")); //调整系数
pMissionBranchVo->autorelease();
m_pBranchInfo->setObject(pMissionBranchVo,pMissionBranchVo->getBranchId());
pNode = pNode->NextSiblingElement();
}
}
//阵容读取
void CustomsPassProxy::loadArrayInfo()
{
ssize_t bufferSize = 0;
unsigned char* pBuffer = CCFileUtils::sharedFileUtils()->getFileData("MissionEnemy.xml",&bufferSizE);
if (NULL == pBuffer)
{
return;
}
Tinyxml2::XMLDocument* pXml = new Tinyxml2::XMLDocument();
pXml->Parse((const char*)pBuffer);
Tinyxml2::XMLElement* pNode = pXml->RootElement()->FirstChildElement();
@H_350_656@missionArrayVo* pMissionArrayVo = nullptr;
while (pNodE)
{
pMissionArrayVo = new @H_350_656@missionArrayVo();
pMissionArrayVo->setEnemyArrID(pNode->IntAttribute("EnemyArrID")); // 阵容ID
pMissionArrayVo->setEnemyOrder(pNode->IntAttribute("EnemyOrder")); // 阵容序号
pMissionArrayVo->setEnemyRatio(pNode->DoubleAttribute("EnemyRatio")); // 阵容系数
pMissionArrayVo->setEnmey1(pNode->IntAttribute("Enmey1")); // 出战角色1
pMissionArrayVo->setLevel1(pNode->IntAttribute("Level1")); // 等级1
pMissionArrayVo->setEnmey2(pNode->IntAttribute("Enmey2")); // 出战角色2
pMissionArrayVo->setLevel2(pNode->IntAttribute("Level2")); // 等级2
pMissionArrayVo->setEnmey3(pNode->IntAttribute("Enmey3")); // 出战角色3
pMissionArrayVo->setLevel3(pNode->IntAttribute("Level3")); // 等级3
pMissionArrayVo->setEnmey4(pNode->IntAttribute("Enmey4")); // 出战角色4
pMissionArrayVo->setLevel4(pNode->IntAttribute("Level4")); // 等级4
pMissionArrayVo->setEnmey5(pNode->IntAttribute("Enmey5")); // 出战角色5
pMissionArrayVo->setLevel5(pNode->IntAttribute("Level5")); // 等级5
pMissionArrayVo->autorelease();
m_pEnmeyArrInfo->setObject(pMissionArrayVo,pMissionArrayVo->getEnemyArrID());
pNode = pNode->NextSiblingElement();
}
}
//根据关卡ID获取此关卡ID的信息
@H_350_656@missionTrunkVo* CustomsPassProxy::getMapInfo(int mapId)
{
DictElement* pElement = NULL;
CCDicT_FOREACH(m_pTrunkInfo,pElement)
{
auto KeymapId = pElement->geTintKey();
if (KeymapId == mapId)
{
@H_350_656@missionTrunkVo* @H_350_656@mapInfo = (@H_350_656@missionTrunkVo*)pElement->getObject();
return @H_350_656@mapInfo;
}
}
}
//根据节点id去获取此节点id中的数据
@H_350_656@missionBranchVo* CustomsPassProxy::getNodeInfo(int nodEID)
{
DictElement* pElement = NULL;
CCDicT_FOREACH(m_pBranchInfo,pElement)
{
auto KeyNodEID = pElement->geTintKey();
if (KeyNodEID == nodEID)
{
@H_350_656@missionBranchVo* NodeInfo = (@H_350_656@missionBranchVo*)pElement->getObject();
return NodeInfo;
}
}
}
//根据节点id去获取阵容表中的数据
@H_350_656@missionArrayVo* CustomsPassProxy::getCurEnemyInfo(int nodEID)
{
@H_350_656@missionBranchVo* Node = getNodeInfo(nodEID);
int _ArrId = Node->getNodeOrderId();
DictElement* pElement = NULL;
CCDicT_FOREACH(m_pEnmeyArrInfo,pElement)
{
auto KeyEnemyId = pElement->geTintKey();
if (KeyEnemyId == _ArrId)
{
@H_350_656@missionArrayVo* _EnemyArrInfo = (@H_350_656@missionArrayVo*)pElement->getObject();
return _EnemyArrInfo;
}
}
}
APP_NS_END
以上是大佬教程为你收集整理的cocos2dx游戏只关卡开发全部内容,希望文章能够帮你解决cocos2dx游戏只关卡开发所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。