• <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 閱讀(2945) 評論(0)  編輯 收藏 引用 所屬分類: cocos2dx
            久久久国产视频| 精品精品国产自在久久高清| 精品久久久久久国产三级| 亚洲成色999久久网站| 香蕉aa三级久久毛片| 国产美女亚洲精品久久久综合| 成人妇女免费播放久久久| 久久国产精品免费| 日韩乱码人妻无码中文字幕久久| 久久精品国产亚洲沈樵| 亚洲国产成人精品无码久久久久久综合| 亚洲欧美日韩精品久久亚洲区 | 女同久久| 久久国产精品成人影院| 日本欧美国产精品第一页久久| 久久久噜噜噜久久中文福利| 久久久久无码中| 久久亚洲春色中文字幕久久久| 思思久久99热免费精品6| 久久被窝电影亚洲爽爽爽| 精品综合久久久久久97| 日本国产精品久久| 久久久精品人妻无码专区不卡| 狠狠色婷婷综合天天久久丁香| 囯产极品美女高潮无套久久久| 久久一区二区三区99| 免费观看久久精彩视频| 国产精品久久久久AV福利动漫 | 久久人人添人人爽添人人片牛牛| 日本久久久精品中文字幕| 青青草原精品99久久精品66| 精品国产乱码久久久久软件| 日韩AV毛片精品久久久| 久久久久亚洲AV成人网人人网站 | 99久久精品国产综合一区| 91精品国产乱码久久久久久| 久久久无码人妻精品无码| 人人狠狠综合久久88成人| 一本色道久久88精品综合| 伊人久久大香线蕉av一区| 亚洲精品乱码久久久久久蜜桃不卡 |