LAYER_NODE_FUNC自动创建一个layer,SCENE_NODE_FUNC,自动创建一个scene
看下源码:
#define LAYER_NODE_FUNC(layer) \
CC_DEPRECATED_ATTRIBUTE static layer* node() \
{ \
layer *pRet = new layer(); \// new 一个layer
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \ // 自动释放掉
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
#define SCENE_NODE_FUNC(scene) \
CC_DEPRECATED_ATTRIBUTE static scene* node() \
{ \
scene *pRet = new scene(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
};
从上面的源码来看,我们只需要利用这个宏来产生一个layer或者scene,但是不需要我们手动去释放掉,它在使用完之后计数自动减1,至0时delete掉。
源码分析完了,那我们来看下如何创建,例子代码:
#ifndef MYNEWSCENE_H_
#define MYNEWSCENE_H_
#include "cocos2d.h"
USING_NS_CC;
class MyNewScene : public CCScene
{
public:
MyNewScene();
~MyNewScene();
bool init();
SCENE_NODE_FUNC(MyNewScene);
private:
};// end of MyNewScene
class MyNewLayer : public CCLayer
{
public:
MyNewLayer();
~MyNewLayer();
bool init();
LAYER_NODE_FUNC(MyNewLayer);
};// end of MyNewLayer
#endif // end of MYNEWSCENE_H_
//
CCScene *pScene = MyNewScene::node();//调用node方法,产生一个节点,它会自动去调用你的宏(创建scene)
CCLayer *layer = MyNewLayer::node();
//------------------------------------------------------------------
LAYER_CREATE_FUNC,SCENE_CREATE_FUNC
这两个宏跟上面的一类似:
#define LAYER_CREATE_FUNC(layer) \
static layer* create() \
{ \
layer *pRet = new layer(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
}
#define SCENE_CREATE_FUNC(scene) \
static scene* create() \
{ \
scene *pRet = new scene(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
};
我们在创建的时候不是再调用node方法了,而是直接调用create方法,例子代码如下:
MyNewScene *pScene = MyNewScene::create();
MyNewLayer *layer = MyNewLayer::create();
以上就是宏来创建layer,scene了。