cocos2dx游戏只关卡开发

来源:互联网 发布:软件测评 编辑:程序博客网 时间:2024/05/22 17:00

小伙伴们今天晚上我要给大家讲讲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;//关卡UIenum MissionUiBtn{    tagTurnBack,    tagStageNormal,    tagStageElite,    tagStageTeam,    tagTurnLeft,    tagTurnRight,    tagShowDialog};//Button  tag//todostruct 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_BEGINCustomsPassUi::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_normal.png", "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_normal.png", "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(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),0.05,0.5);        }    }}APP_NS_END
#include <ScreenUtil.hpp>#include <Language.hpp>#include <CMisc.hpp>#include <Facade.hpp>USING_NS_CC;CLIENT_NS_BEGINusing namespace cocoswidget;enum DialogBtn{    tagStageBack,    tagStageFight};class CustomsPassDialogUi : public CSceneExtension{public:    CREATE_SCENE_FUNC(CustomsPassDialogUi);    CustomsPassDialogUi();    ~CustomsPassDialogUi();    virtual void onLoadResources();    virtual void onLoadResourcesCompleted();    virtual void onLoadScene();    virtual void onEnterScene();    virtual void onExitScene();private:    void initDialog();private:    CC_SYNTHESIZE_READONLY(int, n_pMissionID, MissionID);  //调用的关卡ID    CC_SYNTHESIZE_READONLY(int, n_pMissionType, MissionDialogType);//调用关卡类型    CC_SYNTHESIZE_READONLY(Sprite*, m_pBackPictrue, BackPictrue);           //地图图片    CC_SYNTHESIZE_READONLY(Texture2D*, m_pFrameTextrue ,FrameTexture);      //弹窗背景Texture       CC_SYNTHESIZE_READONLY(Sprite*, m_pBg, Bg);                             //弹框背景    CC_SYNTHESIZE_READONLY(Sprite*, m_pStar, Star);                         //星星    CC_SYNTHESIZE_READONLY(cocoswidget::CButton*, m_pBack, CallBackBtn);  //返回按钮    CC_SYNTHESIZE_READONLY(cocoswidget::CButton*, m_pFightBtn, GoFightBtn);  //战斗按钮    CC_SYNTHESIZE_READONLY(cocoswidget::CLabel*, m_pTitle, LabelTitle);  //该关卡名字    CC_SYNTHESIZE_READONLY(cocoswidget::CLabel*, m_pDes, LabelDes);      //描述该关卡    CC_SYNTHESIZE_READONLY(cocoswidget::CLabel*, m_pConsume, LabelConsume);//体力消耗数值    // todo   敌方阵容....可能获得...图片显示};APP_NS_END#endif
#include "MissionDialogUi.hpp"#include <XmlConfig.hpp>CLIENT_NS_BEGINCustomsPassDialogUi::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, 207, 87));    getLabelConsume()->setPosition(ccp(130, 350));    addChild(getLabelConsume());    //体力图片    //敌方阵容    auto enmeyLable = CLabel::create();    enmeyLable->setString(LANGUAGE_VALUE("MissionDialog_EnemyArr"));    enmeyLable->setColor(Color3B(255, 277, 132));    enmeyLable->setPosition(ccp(130, 320));    addChild(enmeyLable);    //可能获得    auto gainLable = CLabel::create();    gainLable->setString(LANGUAGE_VALUE("MissionDialog_gain"));    gainLable->setColor(Color3B(255, 277, 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_BEGINUSING_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_BEGINCustomsPassMediator::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_BEGINUSING_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_BEGINCustomsPassDialogMediator::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)->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_BEGINUSING_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_BEGINCustomsPassProxy::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 )    {        MissionInfoVec xMissionInfoVec;        StageInfoVec::iterator iter = missionAgentTokenAck.StageInfo.begin();        StageInfoVec::iterator end  = missionAgentTokenAck.StageInfo.end();        for (; iter != end;++iter)        {            MissionInfo xMissionInfo;            xMissionInfo.MissionId = iter->MissionSqlId;            xMissionInfo.MissionType = iter->MissionSqlType;            xMissionInfo.MissionStar = iter->MissionSqlStar;            xMissionInfo.MissionCount = iter->MissionSqlCount;            xMissionInfo.MissionResetCount = iter->MissionSqlResetCount;            xMissionInfo.MissionDilayChallenge = iter->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.MissionToID = id;    missionAgentTokenReq.MissionToType = mission_type;    missionAgentTokenReq.MissionToStar = star;    missionAgentTokenReq.MissionToCount = 2;    missionAgentTokenReq.MissionToResetCount = 1;    missionAgentTokenReq.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();    MissionTrunkVo* pMissionTrunkVo = nullptr;    while (pNode)    {        pMissionTrunkVo = new 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", "r", &bufferSize);    if (NULL == pBuffer)    {        return;    }    tinyxml2::XMLDocument* pXml = new tinyxml2::XMLDocument();    pXml->Parse((const char*)pBuffer);    tinyxml2::XMLElement* pNode = pXml->RootElement()->FirstChildElement();    MissionBranchVo* pMissionBranchVo = nullptr;    while (pNode)    {        pMissionBranchVo = new 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", "r", &bufferSize);    if (NULL == pBuffer)    {        return;    }    tinyxml2::XMLDocument* pXml = new tinyxml2::XMLDocument();    pXml->Parse((const char*)pBuffer);    tinyxml2::XMLElement* pNode = pXml->RootElement()->FirstChildElement();    MissionArrayVo* pMissionArrayVo = nullptr;    while (pNode)    {        pMissionArrayVo = new 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的信息MissionTrunkVo* CustomsPassProxy::getMapInfo(int mapId){    DictElement* pElement = NULL;    CCDICT_FOREACH(m_pTrunkInfo, pElement)    {        auto KeyMapId = pElement->getIntKey();        if (KeyMapId == mapId)        {            MissionTrunkVo* MapInfo = (MissionTrunkVo*)pElement->getObject();            return MapInfo;        }    }}//根据节点id去获取此节点id中的数据MissionBranchVo* CustomsPassProxy::getNodeInfo(int nodeId){    DictElement* pElement = NULL;    CCDICT_FOREACH(m_pBranchInfo, pElement)    {        auto KeyNodeId = pElement->getIntKey();        if (KeyNodeId == nodeId)        {            MissionBranchVo* NodeInfo = (MissionBranchVo*)pElement->getObject();            return NodeInfo;        }    }}//根据节点id去获取阵容表中的数据MissionArrayVo* CustomsPassProxy::getCurEnemyInfo(int nodeId){    MissionBranchVo* Node = getNodeInfo(nodeId);    int _ArrId = Node->getNodeOrderId();    DictElement* pElement = NULL;    CCDICT_FOREACH(m_pEnmeyArrInfo, pElement)    {        auto KeyEnemyId = pElement->getIntKey();        if (KeyEnemyId == _ArrId)        {            MissionArrayVo* _EnemyArrInfo = (MissionArrayVo*)pElement->getObject();            return _EnemyArrInfo;        }    }}APP_NS_END
0 0