cocos2dx游戏只关卡开发

本文探讨了使用cocos2dx进行游戏关卡开发的技术要点,作者分享了自己的代码实现,并提到在通关后如何与服务端交互,通知玩家的进度情况。更多详细内容将在后续讲解中展开。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小伙伴们今天晚上我要给大家讲讲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_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::onPa
cocos creator实现的推箱子游戏,含源码和功能;游戏一共有100关卡。 cc.Class({ extends: cc.Component, properties: { // foo: { // // ATTRIBUTES: // default: null, // The default value will be used only when the component attaching // // to a node for the first time // type: cc.SpriteFrame, // optional, default is typeof default // serializable: true, // optional, default is true // }, // bar: { // get () { // return this._bar; // }, // set (value) { // this._bar = value; // } // }, starImg : cc.Node, itemBg : cc.Node, levelTxt : cc.Node, }, // LIFE-CYCLE CALLBACKS: onLoad () { }, start () { }, //--------显示星星数量-------- /** * @description: 显示星星数量 * @param {boolean} isOpen 是否开启 * @param {starCount} 星星数量 * @param {cc.SpriteAtlas} levelImgAtlas 纹理图 * @param {number} level 关卡 * @return: */ showStar : function(isOpen, starCount, levelImgAtlas, level){ this.itemBg.attr({"_level_" : level}); if(isOpen){ this.itemBg.getComponent(cc.Sprite).spriteFrame = levelImgAtlas.getSpriteFrame("pass_bg"); this.starImg.active = true; this.starImg.getComponent(cc.Sprite).spriteFrame = levelImgAtlas.getSpriteFrame("point" + starCount); this.levelTxt.opacity = 255; this.itemBg.getComponent(cc.Button).interactable = true; }else{ this.itemBg.getComponent(cc.Sprite).spriteFrame = levelImgAtlas.getSpriteFrame("lock"); this.starImg.active = false; this.levelTxt.opacity = 125; this.itemBg.getComponent(cc.Button).interactable = false; } this.levelTxt.getComponent(cc.Label).string = level; }, /
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值