• <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++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks
            這篇主要總結(jié)下cocos2dx中常用到的3大宏定義(數(shù)學(xué)類宏定義、數(shù)據(jù)結(jié)構(gòu)相關(guān)宏定義、對象相關(guān)宏定義),由于在win下的vs編譯太慢,所以這些測試代碼都是在mac下編譯的,有如下
            之所以分為三大類是為了方便記憶、歸納。分類不在于分細、而在于簡約、容易記憶。
            1.數(shù)學(xué)相關(guān)的宏
            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斷言宏
            把這個歸位數(shù)學(xué)類,是因為我認為,斷言本身就是屬于數(shù)學(xué)的一種抽象名詞
            ASSERT(cone, msg);
            第一個參數(shù)是條件,為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.與特定數(shù)據(jù)結(jié)構(gòu)相關(guān)的宏(主要用來遍歷、如同迭代器)
            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和對應(yīng)的key。
            輸出:

            cocos2d: KEY=one,CCDICT_FOREACH 1

            cocos2d: KEY=two,CCDICT_FOREACH 2

            cocos2d: KEY=three,CCDICT_FOREACH 3



            3.對象相關(guān)宏定義
            #3.1對象創(chuàng)建方法宏CREATE_FUNC
            這里直接貼出這個的宏定義,其主要意思
            就是先new、new完后是通過init初始化,而不是構(gòu)造函數(shù)。如果
            init返回false,也就是失敗。則釋放對象返回NULL。否則,把其加入
            自動管理的內(nèi)存池,然后返回該對象的引用(本質(zhì)是指針)。
             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++得方式,實現(xiàn)了C#中的屬性,通過這個宏定義,
            可以自動生產(chǎn)protected的成員變量,和public的虛setter、getter方法
            具體的setter、getter實現(xiàn)需要,自己實現(xiàn)。如下
            //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 閱讀(2946) 評論(0)  編輯 收藏 引用 所屬分類: cocos2dx
            国产精品久久久亚洲| 午夜久久久久久禁播电影| 四虎久久影院| 色综合久久无码五十路人妻 | 精品久久久久久久中文字幕 | 亚洲AV无码久久精品狠狠爱浪潮 | 日本精品一区二区久久久| 亚洲精品白浆高清久久久久久| 久久综合狠狠色综合伊人| 亚洲国产成人久久笫一页| 国产午夜精品理论片久久影视| 久久综合色之久久综合| 久久r热这里有精品视频| 免费精品国产日韩热久久| 久久最新精品国产| 日韩精品久久无码中文字幕| 久久人人爽人人爽AV片| 久久精品国产亚洲沈樵| 久久精品国产亚洲AV麻豆网站| 久久亚洲AV无码西西人体| 亚洲国产精品久久久久久| 久久无码人妻一区二区三区| 久久久久久久久66精品片| 精品久久久久一区二区三区| 国产91色综合久久免费| 久久国产精品无码一区二区三区| 国内精品伊人久久久影院| 久久久久无码专区亚洲av| 亚洲性久久久影院| 久久成人18免费网站| 精品久久久久久国产免费了| 伊人久久大香线蕉精品| 精品久久777| 久久青草国产精品一区| 国产欧美一区二区久久| 青青草原1769久久免费播放| 99久久精品国产高清一区二区| 男女久久久国产一区二区三区 | 久久99国产精品二区不卡| 精品久久久噜噜噜久久久 | 久久久久无码精品国产不卡|