• <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>

            f(sixleaves) = sixleaves

            重劍無鋒 大巧不工

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks
            這篇主要總結下cocos2dx中常用到的3大宏定義(數學類宏定義、數據結構相關宏定義、對象相關宏定義),由于在win下的vs編譯太慢,所以這些測試代碼都是在mac下編譯的,有如下
            之所以分為三大類是為了方便記憶、歸納。分類不在于分細、而在于簡約、容易記憶。
            1.數學相關的宏
            CCRANDOM_MINUS1_1()、CCRANDOM_0_1()、CC_DEGREES_TO_RADIANS、CC_RADIANS_TO_DEGREES()

            1 log("CCRANDOM_MINUS1_1=%f", CCRANDOM_MINUS1_1());
            2 log("CCRANDOM_0_1=%f", CCRANDOM_0_1());
            3 log("CC_DEGREES_TO_RADIANS(30)=%f", CC_DEGREES_TO_RADIANS());
            4 log("CC_RADIANS_TO_DEGREES(180)=%f",CC_RADIANS_TO_DEGREES());
            5 int x = 10;
            6 int y = 20;
            7 CC_SWAP(x, y, int);
            8 log("交換后x=%d,y=%d",x,y);
            輸出:
            1 cocos2d: CCRANDOM_MINUS1_1()=-0.999984
            2 cocos2d: CCRANDOM_0_1()=0.131538
            3 cocos2d: CC_DEGREES_TO_RADIANS()=0.523599
            4 cocos2d: CC_RADIANS_TO_DEGREES()=20626.480469
            5 cocos2d: x=20,y=10
            #1.2斷言宏
            把這個歸位數學類,是因為我認為,斷言本身就是屬于數學的一種抽象名詞
            ASSERT(cone, msg);
            第一個參數是條件,為false則提示msg消息。
            1     Point *point = NULL;
            2 //    CCAssert(point != NULL,"something wrong");
            3     CCASSERT(point != NULL, "somthing wrong");
            輸出:
            1 cocos2d: Assert failed: somthing wrong
            2 Assertion failed: (point != __null), function init, file /Users/mac/Desktop/gameDevelopment/1410/testMacro/Classes/HelloWorldScene.cpp, line 39.


            2.與特定數據結構相關的宏(主要用來遍歷、如同迭代器)
            CCARRAY_FOREACH、CCDICT_FOREACH
            CCARRAY_FOREACH
            1     __Array * arrayMe = __Array::create();
            2     arrayMe->addObject(__Integer::create(1));
            3     arrayMe->addObject(__Integer::create(2));
            4     arrayMe->addObject(__Integer::create(3));
            5     Ref * ref = NULL;
            6     CCARRAY_FOREACH(arrayMe, ref) {
            7         Integer *pInt = (Integer *)ref;
            8         log("CCARRAY_FOREACH:%d", pInt->getValue());
            9     }

            輸出:

            cocos2d: CCARRAY_FOREACH:1

            cocos2d: CCARRAY_FOREACH:2

            cocos2d: CCARRAY_FOREACH:3

            CCDICT_FOREACH
            1     __Dictionary * dict = __Dictionary::create();
            2     dict->setObject(__Integer::create(1), "one");
            3     dict->setObject(__Integer::create(2), "two");
            4     dict->setObject(__Integer::create(3), "three");
            5     DictElement *el = NULL;
            6     CCDICT_FOREACH(dict, el) {
            7         __Integer *pVlaue = (__Integer*)el->getObject();
            8         log("KEY=%s,CCDICT_FOREACH %d",el->getStrKey(),pVlaue->getValue());
            9     }
            需要注意的是dictionary中得元素都是DictElement類型,其封裝了每個元素的Object和對應的key。
            輸出:

            cocos2d: KEY=one,CCDICT_FOREACH 1

            cocos2d: KEY=two,CCDICT_FOREACH 2

            cocos2d: KEY=three,CCDICT_FOREACH 3



            3.對象相關宏定義
            #3.1對象創建方法宏CREATE_FUNC
            這里直接貼出這個的宏定義,其主要意思
            就是先new、new完后是通過init初始化,而不是構造函數。如果
            init返回false,也就是失敗。則釋放對象返回NULL。否則,把其加入
            自動管理的內存池,然后返回該對象的引用(本質是指針)。
             1 #define CREATE_FUNC(__TYPE__) \
             2 static __TYPE__* create() \
             3 { \
             4     __TYPE__ *pRet = new __TYPE__(); \
             5     if (pRet && pRet->init()) \
             6     { \
             7         pRet->autorelease(); \
             8         return pRet; \
             9     } \
            10     else \
            11     { \
            12         delete pRet; \
            13         pRet = NULL; \
            14         return NULL; \
            15     } \
            16 }
            17 
            #3.2屬性定義宏
            CC_PROPERTY(tpye, varName, funName);
            這個功能其就是用C++得方式,實現了C#中的屬性,通過這個宏定義,
            可以自動生產protected的成員變量,和public的虛setter、getter方法
            具體的setter、getter實現需要,自己實現。如下
            //Monster.h
            #ifndef __Monster_H__
            #define __Monster_H__
            #include "cocos2d.h"
            USING_NS_CC;
            class Monster:public Sprite {
                CC_PROPERTY(int, _monsterHp, MonsterHp);
            public:
                virtual bool init();
                CREATE_FUNC(Monster);
            };
            #endif
            //Monster.cpp
            //
            //  Monster.cpp
            //  testMacro
            //
            //  Created by sixleaves on 14-10-9.
            //
            //

            #include "Monster.h"


            void Monster::setMonsterHp(int var) {
                _monsterHp = var;
            }

            int Monster::getMonsterHp() {
                return _monsterHp;
            }

            bool Monster::init() {
                return true;
            }
            //HelloWorldScene.cpp
             auto monster = Monster::create();
             monster->setMonsterHp(100);
             log("monster HP = %d", monster->getMonsterHp());
            輸出: cocos2d: monster HP = 100
            提示:還有CC_RROPERTY_XXXX系列的其他宏定義,這里只介紹這個,因為比較常使用,其他自己了解。

            2014.10.09 by sixleaves
            posted on 2014-10-09 14:29 swp 閱讀(2952) 評論(0)  編輯 收藏 引用 所屬分類: cocos2dx
            久久久久亚洲AV无码专区首JN | 国产成人精品久久一区二区三区 | 一本一道久久综合狠狠老| 久久狠狠高潮亚洲精品| 久久综合亚洲色HEZYO国产| 久久国产精品一国产精品金尊| 99精品国产综合久久久久五月天| 久久久久亚洲精品天堂| 久久久久亚洲AV成人网人人网站| 亚洲国产精品无码久久久蜜芽 | 久久久精品免费国产四虎| 久久无码人妻一区二区三区 | 欧美牲交A欧牲交aⅴ久久| av午夜福利一片免费看久久| 久久亚洲精品国产精品婷婷| 精品久久久久久久久久中文字幕| 久久99精品久久久久久| 人妻无码久久一区二区三区免费| 人人狠狠综合久久亚洲88| 亚洲精品国精品久久99热一 | 亚洲国产成人精品女人久久久 | 久久精品一区二区国产| 无码国内精品久久综合88 | 偷窥少妇久久久久久久久| 亚洲狠狠综合久久| 成人a毛片久久免费播放| 精品久久人人做人人爽综合| 欧美大香线蕉线伊人久久| 亚洲欧洲精品成人久久曰影片| 亚洲国产精品成人AV无码久久综合影院 | 国产高潮国产高潮久久久91| 久久国产精品77777| 国产成人精品三上悠亚久久| 色偷偷88欧美精品久久久| 亚洲国产精品一区二区久久| 久久国产乱子精品免费女| 久久久av波多野一区二区| 久久A级毛片免费观看| 久久亚洲精精品中文字幕| 老色鬼久久亚洲AV综合| 亚洲国产精品18久久久久久|