• <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
            91久久成人免费| 中文字幕无码免费久久| 99精品久久精品一区二区| 国内精品伊人久久久久av一坑 | 亚洲国产精品人久久| 国产精品成人99久久久久 | 久久久精品日本一区二区三区| 国产福利电影一区二区三区久久久久成人精品综合 | 亚洲国产精品无码久久SM| 成人免费网站久久久| 思思久久99热只有频精品66| 欧美噜噜久久久XXX| 久久se精品一区精品二区国产 | 日日噜噜夜夜狠狠久久丁香五月 | 久久久久四虎国产精品| 国内精品久久国产| 午夜不卡888久久| 久久久久久亚洲精品成人| 久久噜噜久久久精品66| 精品久久久久久中文字幕| 久久99热这里只有精品国产| 狠狠色丁香婷婷综合久久来来去| 一本色道久久88精品综合 | 思思久久99热只有频精品66| 欧美精品一区二区精品久久| 亚洲中文字幕无码久久综合网| 午夜精品久久久久9999高清| 99久久国产亚洲高清观看2024| 久久精品国产亚洲精品2020| 精品综合久久久久久98| 亚洲国产精品嫩草影院久久| 精品国际久久久久999波多野| 综合久久给合久久狠狠狠97色| 欧美精品一本久久男人的天堂| 国产精品久久久久9999| 无码人妻久久一区二区三区| 人妻无码精品久久亚瑟影视| 久久久噜噜噜久久中文字幕色伊伊| 久久线看观看精品香蕉国产| 日本久久久精品中文字幕| 国产精品99久久99久久久|