• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            專(zhuān)職C++

            不能停止的腳步

              C++博客 :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
              163 Posts :: 7 Stories :: 135 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(28)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            #

            本文地址:http://www.shnenglu.com/zdhsoft/archive/2014/07/19/207715.html
            筆記匯總:http://www.shnenglu.com/zdhsoft/archive/2014/07/15/207659.html
            cocos2dx不僅是有框架,還提供了一個(gè)編輯器,可以對(duì)動(dòng)畫(huà)、UI、骨骼動(dòng)畫(huà)和場(chǎng)景編輯的功能。
            使用這些工具,大大縮短了用cocos2dx開(kāi)發(fā)周期。但總的來(lái)說(shuō),操作并不是很方便,但是有總比沒(méi)有強(qiáng)!
            下載地址:http://cn.cocos2d-x.org/download/ 現(xiàn)在MAC的版本也出來(lái)了。
            下圖是界面


            然后啟動(dòng),新建一個(gè)項(xiàng)目


            這樣就完成項(xiàng)目的創(chuàng)建。
            在編輯之前,需要先給項(xiàng)目提供資源,一種是把資源拖到右邊的資源列表或都在資源列表打開(kāi)選擇資源對(duì)話框。


            插入結(jié)果
            其它資源依此類(lèi)推。
            項(xiàng)目創(chuàng)建會(huì)默認(rèn)創(chuàng)建一個(gè)畫(huà)布和一個(gè)容器panel

            在正式編輯UI之前,需要先設(shè)置畫(huà)面大小,這個(gè)跟據(jù)你項(xiàng)目的要求設(shè)置。

            下面在畫(huà)面中,填加一個(gè)圖片。很不幸,你不能從資源列表直接拖到中間的畫(huà)布上只,只能在畫(huà)布或?qū)ο罅斜硎褂糜益I,彈出右鍵菜單,添加圖片對(duì)象。


            然后,用鼠標(biāo)選這個(gè)對(duì)象。在畫(huà)面的右邊,會(huì)有一個(gè)對(duì)象的屬性面板。

            屬性面版有尺寸和模式、常規(guī)、控件布局、特性。大家可以嘗試設(shè)置,就知道他的作用了。添加完成后,把具體的圖片資源拖到屬性面版->特性->文件框內(nèi),就可以了。

            結(jié)果

            這樣就OK了
            在屬性面板有一個(gè)Tag屬性和名子屬性要注意一下,我面在加載UI后,可以通過(guò)這兩個(gè)屬性取得UI中的這個(gè)對(duì)象。
            可能調(diào)整渲染層級(jí)達(dá)到調(diào)整顯示次序的效果。
            按照上面的步驟,就可以很快的做出UI了。
            做完后,就需要導(dǎo)出UI了,cocos2dx是不能直接使用UI工程的,需要使用導(dǎo)出的。


            在導(dǎo)出資源這塊,要注意一下,使用大圖,會(huì)把用到的資源拼成一個(gè)大圖,可以提高效率。使用小圖,則把資源的圖原樣復(fù)制過(guò)去。這個(gè)看你的取舍了。
            導(dǎo)出完成后,把導(dǎo)出的目錄復(fù)制到cocos2dx工程的Resource這個(gè)目錄下面,就可以在項(xiàng)目中使用了。

            最后在需要使用這個(gè)UI的場(chǎng)景,增加下面代碼

                    gui::TouchGroup* ul = gui::TouchGroup::create();
                    ul->addWidget(GUIReader::shareReader()->widgetFromJsonFile("NewUi_1/NewUi_1.ExportJson"));
                    this->addChild(ul, 2);
            如果要訪問(wèn)這個(gè)資源,就可以通過(guò)tag來(lái)操作。 ul->getWidgetByTag(42)。注意不是ui->getChildByTag(42),這個(gè)不會(huì)遍歷所有的子節(jié)點(diǎn)。 !這樣就完成一個(gè)完全的UI操作!
            posted @ 2014-07-19 12:28 冬瓜 閱讀(5973) | 評(píng)論 (0)編輯 收藏

                 摘要: 今年7月以來(lái),終于完全投入到cocos2dx手機(jī)項(xiàng)目開(kāi)發(fā)了。真是不容易啊。在這之前,做了很多嘗試cocos的各種版本。cocos2dx 2.2.2,quick cocos2dx 2.2.4,cocos2dx 2.2.5,cocos2dx.3.0,cocos2dx 3.1,最終,決定還是使用2.2.2這個(gè)版本,我的大多數(shù)例子也是基于這個(gè)版本的,其它的或多或少總有些問(wèn)題。特別是這次cocos2dx 2.2.5發(fā)布,問(wèn)題也比較大,作者有些隨意了。隨機(jī)項(xiàng)目中進(jìn)展,我會(huì)把項(xiàng)目遇到的問(wèn)題,會(huì)以筆記的方式列出來(lái),為什么:為我以為再次遇到問(wèn)題可以快速度解決。  閱讀全文
            posted @ 2014-07-15 23:37 冬瓜 閱讀(2547) | 評(píng)論 (2)編輯 收藏

            cocos2dx有一個(gè)編輯器:cocostudio,目前來(lái)說(shuō),已經(jīng)是比較好用了,只要加載導(dǎo)出的資源,就可以用上了。省去手動(dòng)搭建面的麻煩。但是,很多需要事件的地方,操作比較麻煩,所以這里提供一個(gè)事件管理器來(lái)集中和簡(jiǎn)化管理事件。對(duì)于C++事件委托方面,我這里使用了是FastDelegate(注:一個(gè)牛人寫(xiě)的)。下面是具體實(shí)現(xiàn)的代理,不多。

            /*
                UI觸摸事件管理器。
                原有cocos2dx帶的觸摸事件,每次監(jiān)聽(tīng)要操作的步驟比較多,為此增加了一個(gè)事件管理器,來(lái)集中和簡(jiǎn)化管理
            */
            #ifndef _X_TOUCH_EVENT_MANAGER_H_
            #define _X_TOUCH_EVENT_MANAGER_H_
            #include <cocos2d.h>
            #include <cocos-ext.h>
            #include <FastDelegate.h>
            #include <xmap.h>
            #include <xlog.h>
            namespace zdh
            {
                USING_NS_CC;
                USING_NS_CC_EXT;
                class XTouchEventManager : public CCObject
                {
                public:
                    //綁定的事件定義
                    typedef fastdelegate::FastDelegate<void(gui::Widget *, gui::TouchEventType)> TTouchEvent;
                
                    typedef int TagID_t;
                    //一個(gè)Tag的觸模事件結(jié)構(gòu),包括了四個(gè)事件
                    struct STagEvent
                    {
                        TTouchEvent EventBegin;
                        TTouchEvent EventMoved;
                        TTouchEvent EventEnded;
                        TTouchEvent EventCanceled;

                        TTouchEvent * getByType(gui::TouchEventType paramType)
                        {
                            switch (paramType)
                            {
                            case gui::TOUCH_EVENT_BEGAN:
                                return &EventBegin;
                            case gui::TOUCH_EVENT_MOVED:
                                return &EventMoved;
                            case gui::TOUCH_EVENT_ENDED:
                                return &EventEnded;
                            case gui::TOUCH_EVENT_CANCELED:
                                return &EventCanceled;
                            }
                            return nullptr;
                        }
                        //判斷事件是不是都是為空
                        bool isAllEmpty() const
                        {
                            return EventBegin.empty()
                                && EventEnded.empty()
                                && EventMoved.empty()
                                && EventCanceled.empty();
                        }
                    };
                    //Tag事件映射表,可以換用std::map
                    typedef XMap<TagID_t, STagEvent> TEventMap;
                public:
                    XTouchEventManager()
                        :m_UI(nullptr)
                    {}

                    static XTouchEventManager * create()
                    {
                        XTouchEventManager * pRet = new XTouchEventManager();
                        pRet->autorelease();
                        return pRet;
                    }
                    //property
                    void setUI(gui::TouchGroup * paramUI)
                    {
                        m_UI = paramUI;
                    }
                    gui::TouchGroup * getUI()
                    {
                        return m_UI;
                    }
                    //綁定一個(gè)指定Tag和事件類(lèi)型的事件
                    TTouchEvent * Bind(TagID_t paramTagID, gui::TouchEventType paramType)
                    {
                        if (!(paramType == gui::TOUCH_EVENT_BEGAN
                            || paramType == gui::TOUCH_EVENT_CANCELED
                            || paramType == gui::TOUCH_EVENT_ENDED
                            || paramType == gui::TOUCH_EVENT_MOVED))  return nullptr;

                        int iIndex = m_Map.getIndexBykey(paramTagID);
                        if (m_Map.isValidIndex(iIndex))
                        {
                            return m_Map.getValue(iIndex).getByType(paramType);
                        }
                        else
                        {
                            gui::Widget * pWidget = GetNodeByTag(paramTagID);
                            if (isNULL(pWidget)) return nullptr;
                            pWidget->addTouchEventListener(this, gui::SEL_TouchEvent(&XTouchEventManager::OnUITouch));
                            return m_Map[paramTagID].getByType(paramType);
                        }
                    }

                    //移除指定Tag和事件類(lèi)型的偵聽(tīng)
                    void RemoveListen(TagID_t paramTagID, gui::TouchEventType paramType)
                    {
                        if (!(paramType == gui::TOUCH_EVENT_BEGAN
                            || paramType == gui::TOUCH_EVENT_CANCELED
                            || paramType == gui::TOUCH_EVENT_ENDED
                            || paramType == gui::TOUCH_EVENT_MOVED))  return;
                        int iIndex = m_Map.getIndexBykey(paramTagID);
                        if (m_Map.isValidIndex(iIndex))
                        {
                            auto pV = m_Map.getValue(iIndex);
                            pV.getByType(paramType)->clear();
                            if (pV.isAllEmpty())  //如果這個(gè)Tag完全沒(méi)有事件偵聽(tīng),那么就清除這個(gè)Tag的偵聽(tīng)
                            {
                                RemoveListen(paramTagID);
                            }
                        }
                    }
                    //移除指定Tag的偵聽(tīng)
                    void RemoveListen(TagID_t paramTagID)
                    {
                        gui::Widget * pWidget = GetNodeByTag(paramTagID);
                        if (isNotNULL(pWidget))
                        {
                            pWidget->addTouchEventListener(nullptr, nullptr);
                        }
                        m_Map.RemoveByKey(paramTagID);
                    }

                private:
                    //當(dāng)UI被偵聽(tīng)的事件,被觸發(fā)
                    void OnUITouch(CCObject* paramSender, gui::TouchEventType paramType)
                    {
                        gui::Widget * pUIControl = dynamic_cast<gui::Widget *>(paramSender);
                        if (isNULL(pUIControl)) return;

                        TagID_t tagID = pUIControl->getTag();
                        STREAM_INFO << "Sender Tag=" << tagID << ", paramType=" << paramType;

                        int iIndex = m_Map.getIndexBykey(tagID);
                        if (m_Map.isValidIndex(iIndex))
                        {
                            auto pV = m_Map.getValue(iIndex);
                            auto pEvent = pV.getByType(paramType);
                            if (isNotNULL(pEvent) && (!pEvent->empty()))
                            {
                                (*pEvent)(pUIControl, paramType); //調(diào)用事件
                            }
                        }
                    }
                    //取UI中指定Tag的widget對(duì)象
                    gui::Widget * GetNodeByTag(TagID_t paramTag)
                    {
                        if (isNULL(m_UI)) return nullptr;
                        return m_UI->getWidgetByTag(paramTag);
                    }

                private:
                    gui::TouchGroup * m_UI;        //用Cocostudio UI編輯器,然后導(dǎo)入生成的UI對(duì)象
                    TEventMap m_Map;            //事件偵聽(tīng)映射表
                };
            }
            #endif

            使用例子:在Init函數(shù)

            m_EventManager = XTouchEventManager::create();  
            m_EventManager->retain();  
              
            gui::TouchGroup* ul = gui::TouchGroup::create();  
            ul->addWidget(GUIReader::shareReader()->widgetFromJsonFile("MainUI_1.ExportJson"));  
            this->addChild(ul, 2);  
              
            m_EventManager->setUI(m_MainUI);  

            最后,事件綁定:

            m_EventManager->Bind(ET_BUTTON_EXIT, gui::TOUCH_EVENT_ENDED)->bind(this, &XSceneMain::OnExit);  
            m_EventManager->Bind(ET_BUTTON_SAVE, gui::TOUCH_EVENT_ENDED)->bind(this, &XSceneMain::OnSave);  

            事件的定義:

            void XSceneMain::OnExit(gui::Widget * paramSender, gui::TouchEventType paramType)  
            {  
                STREAM_INFO << "OnExit";  
            }  
            void XSceneMain::OnSave(gui::Widget * paramSender, gui::TouchEventType paramType)  
            {  
                STREAM_INFO << "OnSave";  
            }  

            依賴(lài)的代碼參考:我的開(kāi)發(fā)代碼   

            posted @ 2014-07-15 15:58 冬瓜 閱讀(2842) | 評(píng)論 (0)編輯 收藏

            quick-cocos2d-x 的中文站是http://quick.cocoachina.com/?page_id=40,用他們自己的話說(shuō):quick-cocos2d-x(后文簡(jiǎn)稱(chēng) quick)與 cocos2d-x 的關(guān)系,用一句話概括:quick 是 cocos2d-x 針對(duì) Lua 的豪華套裝威力加強(qiáng)版。
            這里是他的介紹:http://quick.cocoachina.com/?p=1
            在我試用2.2.4的時(shí)候,2.2.5發(fā)布了,目前quick也是非常活躍。
            首先、按他們的文章:《設(shè)置 quick-cocos2d-x 在 Windows 下的編譯環(huán)境》 http://quick.cocoachina.com/?p=253 部署好,寫(xiě)的很清楚了,照著做就可以了。
            其次、就可以創(chuàng)建項(xiàng)目了,我這里是把quick解壓到了G:\cocos2dx\quickx,然在G:\cocos2dx\quickx\bin下面,就可以看到create_project.bat,然后我們?cè)赿os命令
            提示符下面輸入create_project -p com.my.test 然后它就會(huì)在G:\cocos2dx\quickx\bin下面創(chuàng)建一個(gè)test目錄(如果只有包名的情況下,它會(huì)以最后一個(gè)包名做的項(xiàng)目的名稱(chēng))
            這樣我們就創(chuàng)建了一個(gè)項(xiàng)目。
            第三、用Vs編譯
            vs的工程在G:\cocos2dx\quickx\bin\test\proj.win32下面,打開(kāi)test.sln就可以了。
            然后編譯,就可以顯示,如下圖所示hello world

            第四、用player運(yùn)行
            在G:\cocos2dx\quickx\player\win有一個(gè)player
            它用可以運(yùn)行你的lua工程,下如圖打開(kāi)你的工程,



            就可以立即看到你的運(yùn)行結(jié)果了。
            你可以直接用文本編輯器或其它編輯你的lua文件,保存后,在player按F5就可以立即看到你修改后的運(yùn)行結(jié)果。(不用編譯,就是爽)
            posted @ 2014-07-12 14:24 冬瓜 閱讀(2304) | 評(píng)論 (1)編輯 收藏

            基于cocos2dx 2.2.2版本。這幾天使用了cocostudio實(shí)現(xiàn)了,動(dòng)畫(huà),骨骼動(dòng)畫(huà),UI編輯,粒子效果,雖然有些不足,但已經(jīng)算是非常好了。今天嘗試用lua,這個(gè)非常簡(jiǎn)單,創(chuàng)建的時(shí)候,設(shè)置語(yǔ)言為lua,那就可以創(chuàng)建lua工程。
            在cocos2d-x-2.2.2\tools\project-creator下運(yùn)行:
            python create_project.py -project test_lua -package com.android.zdhsoft -language lua
            xcopy ..\..\cocos2dx\platform\android\java\src\* ..\..\projects\test_lua\proj.android\src /E
            就可以創(chuàng)建test_lua,就可以順利跑起來(lái)。
            但是我有些代碼是C++的,想到在lua下用,感覺(jué)得用cocos2dx自帶的tolua++,會(huì)影響現(xiàn)有的Cocos2dx框架,也可能帶來(lái)潛在的風(fēng)險(xiǎn)。(除了,bug,我一般不樂(lè)意修改框架的東西)。而且需要手動(dòng)綁定的也不多。于是找了幾個(gè)開(kāi)源的綁定框架。有l(wèi)uabind,luatinker,ELuna,luabridge,等。luabind需要boost庫(kù),這個(gè)太頭痛了,luatinker,eluna在試用過(guò)程都有些問(wèn)題(有一個(gè)不支持派生類(lèi)和模板),雖然這兩個(gè)是最簡(jiǎn)單的,但是功能也弱了些。最后,用luabridge順利解決,使用起來(lái)也非常簡(jiǎn)單。
            下面是下載地址:https://github.com/vinniefalco/LuaBridge
            個(gè)版本已經(jīng)支持lua 5.1.5,不過(guò)不支持C++0x11,例子很豐富。這里有很多例子,http://vinniefalco.com/LuaBridge/Manual.html
            載后,直接解壓,把LuaBridge.h,RefCountedObject.h,RefCountedPtr.h和detail下的所有頭文件,全部復(fù)制到classes目錄,然后在AppDelegate包含luabrigde.h就可以了。
            下面是一個(gè)用于測(cè)試的類(lèi)
            class testA
            {
            public:
                testA()
                {

                }
                int getValue()
                {
                    return 100;
                }
            };
            下面是綁定代碼
                luabridge::getGlobalNamespace(pEngine->getLuaStack()->getLuaState())
                    .beginClass<testA>("testA")
                    .addConstructor<void(*) ()>()
                    .addFunction("getValue", &testA::getValue)
                    .endClass();
            然后,就可以在你的lua代碼使用這個(gè)類(lèi)了。
                local testa = testA ()
                cclog("testa=%d", testa:getValue()) 
            現(xiàn)在cocos2dx上面,現(xiàn)在出現(xiàn)了兩個(gè)重要的lua分支, 一個(gè)是quickx,一個(gè)cocos-code-ide。quickx提供了一個(gè)非常強(qiáng)大的lua框架,讓你寫(xiě)lua省心省力。而cocos ide則基于eclipse提供了一個(gè)x-man的編輯器,支持lua和js調(diào)試。這讓C++情何以堪啊!
            posted @ 2014-07-09 20:06 冬瓜 閱讀(1889) | 評(píng)論 (0)編輯 收藏

            cocos2dx框架已經(jīng)提供了很多場(chǎng)景切換的類(lèi),但是一些自定義的場(chǎng)景切換,只有自己實(shí)現(xiàn)了。下面是實(shí)現(xiàn)的類(lèi)。這里設(shè)計(jì)的分辨率是750*500.請(qǐng)根據(jù)實(shí)際的要求調(diào)整。
            頭文件
            #ifndef _TRANSITION_GAME_H_
            #define _TRANSITION_GAME_H_
            #include <cocos2d.h>
            namespace cocos2d 
            {
                class CCTransitionGame : public CCTransitionScene
                {
                public:
                    CCTransitionGame();
                    virtual ~CCTransitionGame();
                    void onEnter();
                    static CCTransitionGame * create(float t, CCScene *scene);
                private:
                    void LRFinish(void);
                    void OnFirstActionFinish(void);
                private:
                    int m_FinishCnt;
                };
            }
            #endif
            源文件
            #include "TransitionGame.h"
            #include "xlog.h"
            #include <xstring.h>
            namespace cocos2d
            {
                using namespace zdh;
                CCTransitionGame * CCTransitionGame::create(float t, CCScene *scene)
                {
                    CCTransitionGame * pScene = new CCTransitionGame();
                    if (pScene && pScene->initWithDuration(t, scene))
                    {
                        pScene->autorelease();
                        return pScene;
                    }
                    CC_SAFE_DELETE(pScene);
                    return NULL;
                }

                CCTransitionGame::CCTransitionGame()
                {
                    m_FinishCnt = 0;
                }

                CCTransitionGame::~CCTransitionGame()
                {
                }

                void CCTransitionGame::onEnter()
                {
                    CCTransitionScene::onEnter();
                    CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();


                    CCPoint stLeftBegin, stLeftEnd, stRightBegin, stRightEnd;
                    //設(shè)置左邊的起點(diǎn)和終點(diǎn)
                    stLeftBegin.setPoint(-436.0f, -60);
                    stLeftEnd.setPoint(visibleSize.width / 2.0f + stLeftBegin.x, -60.0f);
                    //設(shè)置右邊的起點(diǎn)和終點(diǎn)
                    stRightBegin.setPoint(visibleSize.width, -60.0f);
                    stRightEnd.setPoint(visibleSize.width / 2.0f, -60.0f);
                    //加載動(dòng)畫(huà)序列
                    CCSpriteFrameCache* pCache = CCSpriteFrameCache::sharedSpriteFrameCache();
                    pCache->addSpriteFramesWithFile("middle_ani_1.plist");
                    pCache->addSpriteFramesWithFile("middle_ani_2.plist");
                    //生成畫(huà)動(dòng)圖片列表和動(dòng)畫(huà)對(duì)象
                    CCArray* pAnimFrames = CCArray::createWithCapacity(69);
                    XAnsiString strAniName;
                    for (int i = 1; i < 70; i++)
                    {
                        strAniName.printf("light%04d.png", i);
                        pAnimFrames->addObject(pCache->spriteFrameByName(strAniName.c_str()));
                    }
                    CCAnimation* animation = CCAnimation::createWithSpriteFrames(pAnimFrames, this->m_fDuration * 2.0f/3.0f/69.0f );
                    

                    CCNode * pNode = CCNode::create(); //這個(gè)有兩個(gè)子節(jié)點(diǎn),一個(gè)是左邊交換圖片,一個(gè)是中間的動(dòng)畫(huà),用于一起做移動(dòng)的Action
                    CCSprite* pLeft = CCSprite::createWithSpriteFrameName("swap_left.png");
                    pLeft->setAnchorPoint(CCPointZero);
                    pNode->addChild(pLeft);

                    CCSprite * pMiddle = CCSprite::create();  //顯示動(dòng)畫(huà)
                    pMiddle->setAnchorPoint(CCPointZero);
                    pMiddle->setPosition(ccp(436.0f - 69.0f, 250.0f + 60.0f - 72.0f));
                    pMiddle->runAction(CCAnimate::create(animation));
                    pNode->addChild(pMiddle);

                    pNode->setAnchorPoint(ccp(0,0));
                    pNode->setPosition(stLeftBegin);
                    this->addChild(pNode,1);

                    //右邊的交換圖片
                    CCSprite* pRight = CCSprite::createWithSpriteFrameName("swap_right.png");
                    pRight->setPosition(stRightBegin);
                    pRight->setAnchorPoint(CCPointZero);
                    this->addChild(pRight, 0);

                    //定義動(dòng)作
                    
            //左邊的向右移動(dòng)活動(dòng)
                    CCMoveTo* pActionLeft = CCMoveTo::create(m_fDuration / 3, stLeftEnd);
                    //右邊的向左移動(dòng)活動(dòng)
                    CCMoveTo * pActionRight = CCMoveTo::create(m_fDuration / 3, stRightEnd);
                    //原地不動(dòng)
                    CCMoveTo* pActionLeft1 = CCMoveTo::create(m_fDuration / 3, stLeftEnd);
                    CCMoveTo * pActionRight1 = CCMoveTo::create(m_fDuration / 3, stRightEnd);
                    
                    CCMoveTo* pActionLeft2 = CCMoveTo::create(m_fDuration / 3, stLeftBegin);
                    CCMoveTo * pActionRight2 = CCMoveTo::create(m_fDuration / 3, stRightBegin);

                    m_FinishCnt = 0;
                    pNode->runAction(CCSequence::create(pActionLeft, CCCallFunc::create(this, callfunc_selector(CCTransitionGame::OnFirstActionFinish)), pActionLeft1, pActionLeft2, CCCallFunc::create(this, callfunc_selector(CCTransitionGame::LRFinish)), NULL));
                    pRight->runAction(CCSequence::create(pActionRight, pActionRight1,pActionRight2, CCCallFunc::create(this, callfunc_selector(CCTransitionGame::LRFinish)), NULL));
                }

                void CCTransitionGame::LRFinish(void)
                {
                    //所以的活動(dòng)完成后,要執(zhí)行場(chǎng)行的Finish
                    m_FinishCnt++;
                    if (m_FinishCnt >= 2)
                    {
                        CCTransitionScene::finish();
                    }
                }

                void CCTransitionGame::OnFirstActionFinish(void)
                {
                    //打開(kāi)門(mén)之前,關(guān)閉顯示第一個(gè)場(chǎng)景,顯示第二個(gè)場(chǎng)景
                    m_pInScene->setVisible(true);
                    m_pOutScene->setVisible(false);
                }

            }
            用到的資源
            /Files/zdhsoft/plist.zip 效果圖:
            posted @ 2014-07-01 20:12 冬瓜 閱讀(2146) | 評(píng)論 (0)編輯 收藏

                 摘要: 在cocos2dx 2.2.2版本中,cocos使用的是CLOG寫(xiě)入日期,其格式是C的Printf方式生成日志。現(xiàn)在也有很多C++流式日志,類(lèi)似于cout這樣的操作。我看了也有很多,log4cxx,等。但是個(gè)人移動(dòng)有些大。我就在我原來(lái)的日志中增加了對(duì)流式的支持。并順利移植到cocos2dx環(huán)境中使用  閱讀全文
            posted @ 2014-06-30 15:16 冬瓜 閱讀(1209) | 評(píng)論 (0)編輯 收藏

                 摘要: 在用vs開(kāi)發(fā)cocos2dx過(guò)程中,要顯示的中文,要求是UTF-8格式的才能正常顯示出來(lái),但VS一般是ANSI格式保存,這樣,在代碼中寫(xiě)入的中文字符串,運(yùn)行后,顯示的就是亂碼。
            為了正確顯示中文,或支持多語(yǔ)言,我這里定義一個(gè)簡(jiǎn)單的字符串管理類(lèi),來(lái)滿(mǎn)足上述要求。  閱讀全文
            posted @ 2014-06-30 14:59 冬瓜 閱讀(1271) | 評(píng)論 (0)編輯 收藏

            之前我的代碼是放到code.google.com上面的,但是最近老有些問(wèn)題,前些天又發(fā)現(xiàn)發(fā)現(xiàn)csdn搞了一個(gè)git服務(wù)器,于是就把代碼遷移到這上面來(lái)了。地址如下,有喜歡的朋友,可以看看,這些代碼,已經(jīng)在我的很多項(xiàng)目中使用了,當(dāng)然,還會(huì)有不少問(wèn)題。
            下載地址是:https://code.csdn.net/zdhsoft/commonlib/tree/master,git地址是:git@code.csdn.net:zdhsoft/commonlib.git
            對(duì)于windows的客戶(hù)端,薦舉使用TortoiseGit,為什么用它,因?yàn)槲抑坝玫氖荰ortoiseSVN,習(xí)慣了。
            附:
            Git下載地址:https://github.com/msysgit/msysgit/releases/download/Git-1.9.4-preview20140611/Git-1.9.4-preview20140611.exe
            TortoiseGit下載地址:http://wzgj.newhua.com/down/TortoiseGit-1.8.9.0-32bit.zip
            安裝配置過(guò)程,大家都知道,我就不說(shuō)了,很簡(jiǎn)單。
            posted @ 2014-06-27 11:26 冬瓜 閱讀(1608) | 評(píng)論 (1)編輯 收藏

            下面代碼是我常用VA的Snippet的片斷,做記錄,防止丟失
            命令函數(shù)通用代碼
            Title:Command Common! 
            Shortcut:dwr
                TAnswer & stAns = getAnswer();  
                TRequest & stReq = getRequest();
                error_code_t iRet = ERR_OK;
                CPlayer * pPlayer = gPlayerMaster->getPlayer(getUID());
                do
                {
                      if (isNULL(pPlayer))                
                       {                                   
                           iRet = ERR_LOGIC_PLAYER_IS_NULL;
                           break;                          
                       }     
                       pPlayer->PropertyBeginChange();
                    $end$

                }while(false);
                stAns.Result = iRet;          
                gCtrl.AnswerClientCmd(this);  
                if (isNotNULL(pPlayer))               
                {                             
                    pPlayer->PropertyEndChange();
                }                             
                return ERR_OK;
            通用bool屬性代碼
            Title:is Boolean Property
            Shortcut:isb
            //-------------------------------------------------------------------------
            //property $PropertyName$
            bool is$PropertyName$() const
            {
                return this->m_$PropertyName$;
            }
            //--------
            void set$PropertyName$(bool param$PropertyName$)
            {
                this->m_$PropertyName$ = param$PropertyName$;
            }
            通用基本數(shù)據(jù)屬性代碼
            Title:base data property
            Shortcut:bp
            //-------------------------------------------------------------------------
            //property $PropertyName$
            $PropertyType$ get$PropertyName$() const
            {
                return this->m_$PropertyName$;
            }
            //--------
            void set$PropertyName$($PropertyType$ param$PropertyName$)
            {
                this->m_$PropertyName$ = param$PropertyName$;
            }
            通用對(duì)象屬性代碼
            Title:object data property
            Shortcut:op
            //-------------------------------------------------------------------------
            //property $PropertyName$
            const $PropertyType$ & get$PropertyName$() const
            {
                return this->m_$PropertyName$;
            }
            //--------
            void set$PropertyName$(const $PropertyType$ & param$PropertyName$)
            {
                this->m_$PropertyName$ = param$PropertyName$;
            }
            posted @ 2014-06-27 10:09 冬瓜 閱讀(1665) | 評(píng)論 (0)編輯 收藏

            僅列出標(biāo)題
            共17頁(yè): First 4 5 6 7 8 9 10 11 12 Last 
            色婷婷综合久久久久中文一区二区 | 久久中文骚妇内射| 久久久精品免费国产四虎| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 国内精品久久久久国产盗摄| 国产亚洲精品久久久久秋霞| 国产伊人久久| 久久久久久a亚洲欧洲aⅴ| 久久人妻少妇嫩草AV蜜桃| 精品久久久久中文字幕一区| 日韩精品久久无码人妻中文字幕| 色播久久人人爽人人爽人人片aV | 日韩亚洲欧美久久久www综合网| 久久人人爽人人爽人人片av麻烦 | 2021最新久久久视精品爱| Xx性欧美肥妇精品久久久久久| 色综合久久无码五十路人妻| 久久综合伊人77777| 草草久久久无码国产专区| 久久超乳爆乳中文字幕| 中文字幕人妻色偷偷久久| 日本亚洲色大成网站WWW久久| 国内精品欧美久久精品| 久久国产免费观看精品| 国产综合久久久久久鬼色| 久久久老熟女一区二区三区| 伊人久久大香线蕉av不卡| 免费精品久久天干天干| 国产69精品久久久久观看软件| 久久综合精品国产一区二区三区| 国产成人久久精品二区三区| 欧美伊香蕉久久综合类网站| 国产精品久久久久影视不卡| 国产精品久久久久久久| 韩国无遮挡三级久久| 久久这里只有精品久久| 久久综合丝袜日本网| 999久久久国产精品| 精品乱码久久久久久夜夜嗨| 久久成人18免费网站| 亚洲一级Av无码毛片久久精品|