cocos2dx游戏任务系统开发

UI.HPP

#ifndef __QUESTUI_HEADER__
#define __QUESTUI_HEADER__

#include <typedef.hpp>
#include <cocos-base.h>
#include <TableView.h>
#include "ScrollView.h"
#include "WidgetProtocol.h"
#include "cocos-ext.h"
#include "cocos-widget.h"
#include "QuestProxy.hpp"
#include <list>
#include <vector>


CLIENT_NS_BEGIN

USING_NS_CC;

enum QuestUiBtn
{
    tagCloseQuest,//退出按钮枚举;
    tagQuestGreyBtn,//添加灰阶枚举;

    tagQuestTestBtn             //任务添加单元格按钮枚举;

};


class QuestUi :
    public CSceneExtension
{
public:
    CREATE_SCENE_FUNC(QuestUi)

    QuestUi();

    virtual ~QuestUi();

    virtual void onLoadResources();

    virtual void onLoadResourcesCompleted();

    virtual void onLoadScene();

    virtual void onEnterScene();

    void onClickQuest(Ref* pSender);

    void onSeverQuest(int Rid);

    CWidgetWindow* m_pWindow;



    //将任务过来的信息ID容器拷贝出来;
    std::vector<i32>::iterator beg;

    std::vector<string>QuestNameVe;
    std::vector<string>::iterator nameBegin;
private:



    // 任务背景层;
    CC_SYNTHESIZE_READONLY(CCSprite*,m_pQuestBg,QuestBg);
    // 任务退出Button;
    CC_SYNTHESIZE_READONLY(cocoswidget::CButton*,m_pCloseQuest,CloseQuest);
    // 任务标题显示;
    CC_SYNTHESIZE_READONLY(CCSprite*,m_pQuestTitle,QuestTitle);
    // 添加灰阶背景;
    CC_SYNTHESIZE_READONLY(cocoswidget::CButton*,m_pQuestGreyBgBtn,QuestGreyBgBtn);
    // 循环任务Button;
    CC_SYNTHESIZE_READONLY(cocoswidget::CTableView*,m_pQuestView,QuestView);

    CC_SYNTHESIZE_READONLY(cocoswidget::CButton*,m_pQuesButton,QuestCellButton);

    // 添加任务名字信息;
    CC_SYNTHESIZE_READONLY(Label*,m_pTitleName,TitleName);

    QuestProxy* m_pQuestPro;


private:

    Ref* gridpageviewDataSource(Ref* pConvertCell,unsigned int idx);
};

#define g_missionDalog QuestUi::getInstance();

APP_NS_END

#endif __QUESTUI_HEADER__

CPP

#include "QuestUi.hpp"
#include <ScreenUtil.hpp>
#include <CMisc.hpp>
#include <Facade.hpp>
#include <Language.hpp>
#include "QuestMediator.hpp"
#include <XmlConfig.hpp>

CLIENT_NS_BEGIN

using namespace cocoswidget;

QuestUi::QuestUi()// :
//m_pQuestPro(nullptr)
{
    setCachable(true);
    setAutoRemoveUnusedTexture(true);

    m_pQuestPro = (QuestProxy*)g_facade.retrieveProxy("QuestProxy");


    // 拷贝容器;
    //ButSize = m_pQuestPro->ClientQuestInfo;
    beg = m_pQuestPro->butsize.begin();

    //在构造里面不能用,这个样会导致先进入这个然后在获取所对应的值;
    //nameBegin = QuestNameVe.begin();
}

QuestUi::~QuestUi()
{
}

//  UI资源添加;
void QuestUi::onLoadResources()
{

    addImageAsync("QuestUi/DailyQuestBg.jpg");
    addImageAsync("QuestUi/DailyQuestBg_alpha_mask.png");
    addImageAsync("QuestUi/task_window_title_bg.jpg");
    addImageAsync("QuestUi/task_window_title_bg_alpha_mask.png");
    addImageAsync("QuestUi/close.jpg");
    addImageAsync("QuestUi/close_alpha_mask.png");
    addImageAsync("QuestUi/greyBg_1.png");

}

void QuestUi::onLoadResourcesCompleted()
{

}

//  各种UI按钮界面显示展示;
void QuestUi::onLoadScene()
{
    //  添加灰阶背景;
    m_pQuestGreyBgBtn = cocoswidget::CButton::create();
    getQuestGreyBgBtn()->setNormalImage("QuestUi/greyBg_2.png");
    getQuestGreyBgBtn()->setAnchorPoint(ccp(0,0));
    getQuestGreyBgBtn()->setPosition(ccp(0,0));
    this->addChild(getQuestGreyBgBtn());
    this->setTag(tagQuestGreyBtn);

    //  添加背景图层;
    m_pQuestBg = CCSprite::create("QuestUi/QuestBg_1.png");
    getQuestBg()->setAnchorPoint(ccp(0,0));
    getQuestBg()->setPosition(ccp(177,90));
    this->addChild(getQuestBg());

    //  任务退出按钮的添加;
    Texture2D* pCloseNormal = getNewTexture("QuestUi/close.jpg","QuestUi/close_alpha_mask.png");
    m_pCloseQuest = cocoswidget::CButton::create();
    getCloseQuest()->setNormalTexture(pCloseNormal);
    getCloseQuest()->setAnchorPoint(ccp(0,0));
    getCloseQuest()->setPosition(ccp(810,490));
    getCloseQuest()->setTag(tagCloseQuest);
    this->addChild(getCloseQuest());

    //  任务标题显示;
    Texture2D* pQuestTitle = getNewTexture("QuestUi/task_window_title_bg.jpg","QuestUi/task_window_title_bg_alpha_mask.png");
    m_pQuestTitle = CCSprite::createWithTexture(pQuestTitle);
    getQuestTitle()->setAnchorPoint(ccp(0,0));
    getQuestTitle()->setPosition(ccp(137,520));
    this->addChild(getQuestTitle());

    //添加WINDOW 按键;
    m_pWindow = CWidgetWindow::create();
    m_pWindow->setMultiTouchEnabled(true);
    m_pWindow->setAnchorPoint(ccp(0,0));
    m_pWindow->setPosition(ccp(0,0));
    this->addChild(m_pWindow);



    //任务滑动层
    m_pQuestView = CTableView::create(
        Size(729,415),Size(600,135),0,//shu
        this,ccw_datasource_adapter_selector(QuestUi::gridpageviewDataSource));
    m_pQuestView->setDirection(eScrollViewDirectionVertical);
    m_pQuestView->setAutoRelocate(true);
    m_pQuestView->setAnchorPoint(ccp(0,0));
    m_pQuestView->setPosition(Vec2(205,115));
    m_pWindow->addChild(m_pQuestView);

    beg = m_pQuestPro->butsize.begin();
    nameBegin = QuestNameVe.begin();

}



void QuestUi::onEnterScene()
{
    g_facade.sendNotification(FRAME_MESSAGE_ENTER_QUEST_UI);
}

//  任务按钮循环创建;   
Ref* QuestUi::gridpageviewDataSource(Ref* pConvertView,unsigned int idx)
{
    CTableViewCell* pCell = (CTableViewCell*)pConvertView;

    CButton* pButton = nullptr;

    if (!pCell)
    {
        pCell = new CGridPageViewCell();
        pCell->autorelease();

        //  添加
        pButton = CButton::createWith9Sprite(Size(600,125),"QuestUi/questFrameBg.png","QuestUi/task_window_title_bg_alpha_mask.png");
        pButton->setOnClickListener(this,ccw_click_selector(QuestMediator::onClickBtn));
        pButton->setAnchorPoint(ccp(0,0));
        pButton->setTag(tagQuestTestBtn);
        pButton->setPosition(ccp(0,0));
        pCell->addChild(pButton);   

        pButton->setUserTag(*beg);

        //名字显示在 单元格上;
        m_pTitleName = CLabel::create();
        getTitleName()->setString(*nameBegin);
        getTitleName()->setColor(Color3B(0,0));
        getTitleName()->setPosition(Vec2(205,115));
        pButton->addChild(getTitleName());

        if (beg != m_pQuestPro->butsize.end())
        {
            beg++;
            nameBegin++;
        }

    }
    else
    {

        pButton = (CButton*)pCell->getChildByTag(tagQuestTestBtn);

    }


    return pCell;
}



 void QuestUi::onClickQuest(Ref* pSender)
 {
 }



APP_NS_END

QuestMediator.hpp
上面的两个是UI展示部分也就是说能让玩家看到效果的演示而已

QuestMediator.hpp这里是UI部分的控制相当于说这里是大脑而UI是你的肢体

#include <typedef.hpp>
#include <Mediator.hpp>
#include <QuestUi.hpp>
#include <MainMediator.hpp>
#include <FortuneMediator.hpp>
#include <QuestProxy.hpp>
#include <stdio.h>

CLIENT_NS_BEGIN

USING_NS_CC;

class QuestMediator :
    public Mediator
{
public:
    QuestMediator();
    ~QuestMediator();

    virtual void onRegisterNotification();

    virtual void handleNotification(Notification* pNotification);

    virtual void update();

    virtual std::string getMediatorName(){ return "QuestMediator"; }

    void onClickQuestInof();


private:
    CC_SYNTHESIZE_READONLY(QuestUi*,m_pQuestUi,QuestUi);
    CC_SYNTHESIZE_READONLY(QuestProxy*,m_pQuestProxy,QuestProxy);
    CC_SYNTHESIZE_READONLY(cocoswidget::CLabel*,TitleName);

    void onClickBtn(CCObject* pObject);

};

APP_NS_END

CPP

#include "QuestMediator.hpp"
#include <Facade.hpp>
#include <MultiMediator.hpp>

CLIENT_NS_BEGIN

QuestMediator::QuestMediator() :
m_pQuestUi(nullptr),m_pQuestProxy(nullptr)
{
    REGISTER_SCENE_FUNC(QuestUi);
    m_pQuestProxy = (QuestProxy*)g_facade.retrieveProxy("QuestProxy");
}

QuestMediator::~QuestMediator()
{
}

void QuestMediator::onRegisterNotification()
{
    m_xFrameMessageVec.push_back(FRAME_MESSAGE_SHOW_QUEST_UI);

    m_xFrameMessageVec.push_back(FRAME_MESSAGE_ENTER_QUEST_UI);

    m_xFrameMessageVec.push_back(FRAME_MESSAGE_EXIT_QUEST_UI);

}


void QuestMediator::handleNotification(Notification* pNotification)
{
    if (NULL == pNotification)
    {
        return;
    }

    switch (pNotification->m_xMessage)
    {
    //  点击以后进入任务界面;
    case FRAME_MESSAGE_SHOW_QUEST_UI:
    {
        m_pQuestUi = (QuestUi*)LoadScene("QuestUi");
        CSceneManager::getInstance()->runUIScene(m_pQuestUi);

        getQuestProxy()->clientQuestInfo = g_character.getQuestSQLInfovc();

        //拷贝上线时候的任务;
        getQuestProxy()->butsize = getQuestProxy()->clientQuestInfo;

        vector<int>::iterator itor = getQuestProxy()->butsize.begin();
        vector<int>::iterator end = getQuestProxy()->butsize.end();
        for (;itor!=end; itor++)
        {
            QuestXmlVo* sQ = getQuestProxy()->getQuestInof(*itor);
            getQuestUi()->QuestNameVe.push_back(sQ->getQuestName());
        }

        //广播当前任务信息;
        //g_facade.sendNotification()
    }
        break;

    case FRAME_MESSAGE_ENTER_QUEST_UI:
    {
        if (getQuestProxy() == nullptr)
        {
            return;
        }

        // 上线是反馈回来的长度;
        m_pQuestUi->getQuestView()->setCountOfCell(m_pQuestProxy->butsize.size());
        getQuestUi()->getQuestView()->reloadData();
        getQuestUi()->getCloseQuest()->setOnClickListener(this,ccw_click_selector(QuestMediator::onClickBtn));
    }
        break;


    case  FRAME_MESSAGE_EXIT_QUEST_UI:
    {

        CSceneManager::getInstance()->getRunningScene()->setModalable(false);
        CSceneManager::getInstance()->popUIScene(m_pQuestUi);

        FortuneMediator* pFortuneMediator = (FortuneMediator*)g_facade.retrieveMediator("FortuneMediator");
        if (nullptr == pFortuneMediator)
        {
            return;
        }
        pFortuneMediator->getFortuneUi()->setModalable(false);

        //  返回主场景;
        MultiMediator* pMultiMediator = (MultiMediator*)g_facade.retrieveMediator("MultiMediator");
        if (nullptr == pMultiMediator)
        {
            return;
        }
        pMultiMediator->getMultiUi()->setModalable(false);
    }
        break;


    }
}

//  状态的更新;
void QuestMediator::update()
{
    /*if (NULL == pNotification)
    {
        return;
    }

    switch (pNotification->m_xMessage)
    {*/
        /*
        //任务数据更新以后;
        case FRAME_MESSAGE_CHANGE_QUEST_UI:
        {
        //任务数据更新以后;
        if (getQuestProxy() == nullptr)
        {
        return;
        }

        // 上线是反馈回来的长度;
        m_pQuestUi->getQuestView()->setCountOfCell(m_pQuestProxy->butsize.size());
        getQuestUi()->getQuestView()->reloadData();
        getQuestUi()->getCloseQuest()->setOnClickListener(this,ccw_click_selector(QuestMediator::onClickBtn));
        }
        break;*/
//  }

}

void QuestMediator::onClickBtn(CCObject* pObject)
{

    auto pButton = (cocoswidget::CButton*)pObject;
    if (nullptr == pButton)
    {
        return;
    }

    switch (pButton->getTag())
    {
    case tagQuestTestBtn:
    {

        //任务ID;
        auto tag = pButton->getUserTag();

        QuestProxy* pQuestProxy = (QuestProxy*)g_facade.retrieveProxy("QuestProxy");

        if (nullptr == pQuestProxy)
        {
            return;
        }
        pQuestProxy->handleQuestcommpReq(tag);
    }
        break;

    case tagCloseQuest:
    {
                          CCLog("tagCloseQuest");
                          g_facade.sendNotification(FRAME_MESSAGE_EXIT_QUEST_UI);
    }
        break;
    default:
        break;
    }
}
APP_NS_END

UI到服务端的通信也就是传到服务端的信息,比如我是什么任务请求提交 或者完成 或者是否有这个任务等;传到服务端那边的只能是ID
如果你加入string huo这char 这些那么你就会增加通信量减缓消息的接受速度等;

#ifndef __QUEST_PROXY_HEADER__
#define __QUEST_PROXY_HEADER__

#include <typedef.hpp>
#include <Proxy.hpp>
#include <QuestXmlVo.hpp>
#include "Character.hpp"
CLIENT_NS_BEGIN

enum MyEnum
{

};

class QuestProxy : public Proxy
{
public:
    QuestProxy();
    ~QuestProxy();

    virtual void onInitilize();

    virtual void onRegisterMessage();

    virtual std::string getProxyName(){ return "QuestProxy"; }

    void handleQuestcommpReq(int ID);

    //接收请求结果;
    void SeverQuestAgentTokenAck(Message::Ptr &message);

    // Xml信息加载;
    QuestXmlVo* getQuestInof(int QuestID);

    //服务端过来的信息ID容器;
    typedef std::vector<i32> ClientQuestInfo;
    ClientQuestInfo clientQuestInfo;

    //将任务过来的信息ID ClientQusetVo 容器拷贝出来;
    typedef std::vector<i32> ButSize;
    ButSize butsize;


    std::vector<QuestXmlVo*> XmlVo;

    // 返回字典长度
    int getDirLength();

private:
    // 加载信息;
    void loadQuestInfo();

    CC_SYNTHESIZE_READONLY(Character*,m_pCharacter,Character);

private:
    CC_SYNTHESIZE(CCDictionary*,m_pQuestInof,QuestInof);

};

APP_NS_END

#endif // !__QUEST_PROXY_HEADER__

CPP

#include "QuestProxy.hpp"
#include <tinyxml2/tinyxml2.h>
#include "GameServer/Quest.hpp"
#include <Alert.hpp>
#include <Facade.hpp>
#include "QuestMediator.hpp"
#include <NetDelegate.hpp>


CLIENT_NS_BEGIN

QuestProxy::QuestProxy() :
m_pCharacter(nullptr)
{
    m_pQuestInof = CCDictionary::create();
    m_pQuestInof->retain();

    m_pCharacter = (Character*)g_facade.retrieveProxy("Character");
}


QuestProxy::~QuestProxy()
{
}


void QuestProxy::onInitilize()
{
    loadQuestInfo();
// getDirLength();
}

void QuestProxy::onRegisterMessage()
{   
    DEFREG_MESSAGE(ID_GS2C_ListQuestCommitAck,QuestProxy,SeverQuestAgentTokenAck)
}

//任务请求客户端向服务端发送消息;
void QuestProxy::handleQuestcommpReq(int ID)
{


    Message::Ptr sendMsg(new Message());
    C2GS_QuestSubmitReq questSubmitReq;

    questSubmitReq.nQuestID = ID;

    sendMsg->pack(questSubmitReq);
    g_netDelegate.send(sendMsg);

}

//接收请求结果;
void QuestProxy::SeverQuestAgentTokenAck(Message::Ptr &message)
{


    GS2C_ListQuestCommitAck sListQuestCommitAck;
    message->unpack(sListQuestCommitAck);

    std::vector<int>::iterator ite = butsize.begin();
    std::vector<int>::iterator ender = butsize.end();

    for (; ite != ender; ite++)
    {
        if (*ite == sListQuestCommitAck.nQuestID)
        {
            butsize.erase(ite);
            break;
        }
    }
        g_facade.sendNotification(FRAME_MESSAGE_ENTER_QUEST_UI);
    //QuestMediator* pQuestMediator = (QuestMediator*)g_facade->retrieveMediator(FRAME_MESSAGE_CHANGE_QUEST_UI);
    //pQuestMediator->;//->setMailInfoMap(mailInfoMap); */

    //g_facade.sendNotification(FRAME_MESSAGE_CHANGE_QUEST_UI);
}


QuestXmlVo* QuestProxy::getQuestInof(int QuestID)
{
    DictElement* pQuestElement = nullptr;

    CCDICT_FOREACH(m_pQuestInof,pQuestElement)
    {
        auto KeyQuestID = pQuestElement->getIntKey();

        if (KeyQuestID == QuestID)
        {
            QuestXmlVo* QuestsInfo = (QuestXmlVo*)pQuestElement->getObject();
            return QuestsInfo;
        }
    }


    std::vector<int>::iterator ite = butsize.begin();
    std::vector<int>::iterator ender = butsize.end();
    for (; ite != ender; ite++)
    {
        QuestXmlVo* mVo = getQuestInof(*ite);
        XmlVo.push_back(mVo);
    }


}

//XML 客户端的配置读取
void QuestProxy::loadQuestInfo()
{
    ssize_t bufferSize = 0;

    unsigned char* pBuffer = CCFileUtils::sharedFileUtils()->getFileData("QuestX.xml","r",&bufferSize);

    if (NULL == pBuffer)
    { 
        return;
    }

    tinyxml2::XMLDocument* pXml = new tinyxml2::XMLDocument();

    pXml->Parse((const char*)pBuffer);

    tinyxml2::XMLElement* pNode = pXml->RootElement()->FirstChildElement();

    QuestXmlVo* pQuestXmlVo = nullptr;
    while (pNode)
    {
        pQuestXmlVo = new QuestXmlVo();
        // 任务ID;
        pQuestXmlVo->setQuestID(pNode->IntAttribute("QuestID"));

        // 任务名字;
        pQuestXmlVo->setQuestName(pNode->Attribute("QuestName"));

        // 任务资源;
        pQuestXmlVo->setQuestImageID(pNode->Attribute("QuestImageID"));

        // 任务线;
        pQuestXmlVo->setQuestGroup(pNode->IntAttribute("QuestGroup"));

        // 前置任务;
        pQuestXmlVo->setQuestRelate(pNode->IntAttribute("QuestRelate"));

        // 任务解锁等级;
        pQuestXmlVo->setQuestNlockGrade(pNode->IntAttribute("QuestNlockGrade"));

        // 任务类型;
        pQuestXmlVo->setQuestType(pNode->IntAttribute("QuestType"));

        // 任务目标参数1;
        pQuestXmlVo->setQuestTargetParam1(pNode->IntAttribute("QuestTargetParam1"));

        // 任务目标参数2;
        pQuestXmlVo->setQuestTargetParam2(pNode->IntAttribute("QuestTargetParam2"));

        // 任务目标参数3;
        pQuestXmlVo->setQuestTargetParam3(pNode->IntAttribute("QuestTargetParam3"));

        // 任务加权;
        pQuestXmlVo->setQuestWeight(pNode->IntAttribute("QuestWeight"));

        // 任务任务描述;
        pQuestXmlVo->setQuestDescription(pNode->Attribute("QuestDescription"));

        // 任务金币奖励;
        pQuestXmlVo->setQuestcoin(pNode->IntAttribute("QuestCoin"));

        // 任务水晶奖励;
        pQuestXmlVo->setQuestCrystal(pNode->Attribute("QuestCrystal"));

        // 任务经验奖励;
        pQuestXmlVo->setQuetsExp(pNode->IntAttribute("QuetsExp"));

        // 任务其他奖励类型;
        pQuestXmlVo->setQuestRewardType(pNode->Attribute("QuestRewardType"));

        // 任务其他奖励;
        pQuestXmlVo->setQuestReward(pNode->IntAttribute("QuestReward"));

        // 任务说明;
        pQuestXmlVo->setQuestRemark(pNode->Attribute("QuestRemark"));

        // 任务动作;
        pQuestXmlVo->setQuestACtion(pNode->Attribute("QuestACtion"));

        // 任务目标;
        pQuestXmlVo->setQuestDestination(pNode->IntAttribute("QuestDestination"));



        pQuestXmlVo->autorelease();

        m_pQuestInof->setObject(pQuestXmlVo,pQuestXmlVo->getQuestID());

        pNode = pNode->NextSiblingElement();
    }
}

APP_NS_END

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


    本文实践自 RayWenderlich、Ali Hafizji 的文章《How To Create Dynamic Textures with CCRenderTexture in Cocos2D 2.X》,文中使用Cocos2D,我在这里使用Cocos2D-x 2.1.4进行学习和移植。在这篇文章,将会学习到如何创建实时纹理、如何用Gimp创建无缝拼接纹
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@163.com微信公众号:HopToad 欢迎转载,转载标注出处:http://blog.csdn.netotbaron/article/details/424343991.  软件准备 下载地址:http://cn.cocos2d-x.org/download 2.  简介2.1         引用C
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从Cocos2D-x官网上下载,进入网页http://www.cocos2d-x.org/download,点击Cocos2d-x以下的Download  v3.0,保存到自定义的文件夹2:从python官网上下载。进入网页https://www.python.org/downloads/,我当前下载的是3.4.0(当前最新
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发引擎,易学易用,支持多种智能移动平台。官网地址:http://cocos2d-x.org/当前版本:2.0    有很多的学习资料,在这里我只做为自己的笔记记录下来,错误之处还请指出。在VisualStudio2008平台的编译:1.下载当前稳
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《最强大脑》娱乐节目。将2048改造成一款挑战玩家对数字记忆的小游戏。邮箱:appdevzw@163.com微信公众号:HopToadAPK下载地址:http://download.csdn.net/detailotbaron/8446223源码下载地址:http://download.csdn.net/
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试以QtCreatorIDE来进行CMake构建。Cocos2d-x3.X地址:https://github.com/cocos2d/cocos2d-x1.打开QtCreator,菜单栏→"打开文件或项目...",打开cocos2d-x目录下的CMakeLists.txt文件;2.弹出CMake向导,如下图所示:设置
 下载地址:链接:https://pan.baidu.com/s/1IkQsMU6NoERAAQLcCUMcXQ提取码:p1pb下载完成后,解压进入build目录使用vs2013打开工程设置平台工具集,打开设置界面设置: 点击开始编译等待编译结束编译成功在build文件下会出现一个新文件夹Debug.win32,里面就是编译
分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net前言上次用象棋演示了cocos2dx的基本用法,但是对cocos2dx并没有作深入的讨论,这次以超级马里奥的源代码为线索,我们一起来学习超级马里奥的实
1. 圆形音量button事实上作者的本意应该是叫做“电位计button”。可是我觉得它和我们的圆形音量button非常像,所以就这么叫它吧~先看效果:好了,不多解释,本篇到此为止。(旁白: 噗。就这样结束了?)啊才怪~我们来看看代码:[cpp] viewplaincopyprint?CCContro
原文链接:http://www.cnblogs.com/physwf/archive/2013/04/26/3043912.html为了进一步深入学习贯彻Cocos2d,我们将自己写一个场景类,但我们不会走的太远,凡是都要循序渐进,哪怕只前进一点点,那也至少是前进了,总比贪多嚼不烂一头雾水的好。在上一节中我们建
2019独角兽企业重金招聘Python工程师标准>>>cocos2d2.0之后加入了一种九宫格的实现,主要作用是用来拉伸图片,这样的好处在于保留图片四个角不变形的同时,对图片中间部分进行拉伸,来满足一些控件的自适应(PS: 比如包括按钮,对话框,最直观的形象就是ios里的短信气泡了),这就要求图
原文链接:http://www.cnblogs.com/linji/p/3599478.html1.环境和工具准备Win7VS2010/2012,至于2008v2版本之后似乎就不支持了。 2.安装pythonv.2.0版本之前是用vs模板创建工程的,到vs2.2之后就改用python创建了。到python官网下载版本2.7.5的,然后
环境:ubuntu14.04adt-bundle-linux-x86_64android-ndk-r9d-linux-x86_64cocos2d-x-3.0正式版apache-ant1.9.3python2.7(ubuntu自带)加入环境变量exportANDROID_SDK_ROOT=/home/yangming/adt-bundle-linux/sdkexportPATH=${PATH}:/$ANDROID_SDK_ROOTools/export
1开发背景游戏程序设计涉及了学科中的各个方面,鉴于目的在于学习与进步,本游戏《FlappyBird》采用了两个不同的开发方式来开发本款游戏,一类直接采用win32底层API来实现,另一类采用当前火热的cocos2d-x游戏引擎来开发本游戏。2需求分析2.1数据分析本项目要开发的是一款游
原文链接:http://www.cnblogs.com/linji/p/3599912.html//纯色色块控件(锚点默认左下角)CCLayerColor*ccc=CCLayerColor::create(ccc4(255,0,0,128),200,100);//渐变色块控件CCLayerGradient*ccc=CCLayerGradient::create(ccc4(255,0,0,
原文链接:http://www.cnblogs.com/linji/p/3599488.html//载入一张图片CCSprite*leftDoor=CCSprite::create("loading/door.png");leftDoor->setAnchorPoint(ccp(1,0.5));//设置锚点为右边中心点leftDoor->setPosition(ccp(240,160));/
为了答谢广大学员对智捷课堂以及关老师的支持,现购买51CTO学院关老师的Cocos2d-x课程之一可以送智捷课堂编写图书一本(专题可以送3本)。一、Cocos2d-x课程列表:1、Cocos2d-x入门与提高视频教程__Part22、Cocos2d-x数据持久化与网络通信__Part33、Cocos2d-x架构设计与性能优化内存优
Spawn让多个action同时执行。Spawn有多种不同的create方法,最终都调用了createWithTwoActions(FiniteTimeAction*action1,FiniteTimeAction*action2)方法。createWithTwoActions调用initWithTwoActions方法:对两个action变量初始化:_one=action1;_two=action2;如果两个a
需要环境:php,luajit.昨天在cygwin上安装php和luajit环境,这真特么是一个坑。建议不要用虚拟环境安装打包环境,否则可能会出现各种莫名问题。折腾了一下午,最终将环境转向linux。其中,luajit的安装脚本已经在quick-cocos2d-x-develop/bin/中,直接luajit_install.sh即可。我的lin
v3.0相对v2.2来说,最引人注意的。应该是对触摸层级的优化。和lambda回调函数的引入(嗯嗯,不枉我改了那么多类名。话说,每次cocos2dx大更新。总要改掉一堆类名函数名)。这些特性应该有不少人研究了,所以今天说点跟图片有关的东西。v3.0在载入图片方面也有了非常大改变,仅仅只是