把這個歸位數學類,是因為我認為,斷言本身就是屬于數學的一種抽象名詞
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