Cocos2dx-C++ 4.x
什么是Node类
Node类是Cocos2dx的基类,像游戏中的 场景类、精灵类、文本类、菜单类、层类 等都是继承自Node。
Node类详情
Node类的源文件目录
Node类的定义文件目录:Cocos2dx根目录\cocos2d\cocos\2d\CCNode.cpp
Node类的文件声明目录:Cocos2dx根目录\cocos2d\cocos\2d\CCNode.h
Node类的一些常用属性
Vector<Node *> _children; ///< 存放子元素的数组
int _tag; //元素标识,使用一个 int 来标识这个Node
std::string _name; //元素名称,使用一个 string 来标识这个Node
size_t _hashOfName; //_name的哈希值,用于提升getChildByName的查找速度
Size _contentSize; //元素的大小
Vec2 _position; //元素的位置
float _positionZ; // OpenGL渲染该元素的先后顺序
Vec2 _anchorPoint; //元素的锚点
float _rotationX; ///< 沿x轴旋转
float _rotationY; ///< 沿y轴旋转
// 旋转Z被分解为两部分来模拟动画的倾斜
float _rotationZ_X; ///< x部分
float _rotationZ_Y; ///< y部分
//缩放
float _scaleX; ///< scaling factor on x-axis
float _scaleY; ///< scaling factor on y-axis
float _scaleZ; ///< scaling factor on z-axis
bool _visible; //元素是否被显示
创建Node对象
Cocos2dx 对c++的内存机制进行了封装,不使用 new 关键字来创建对象,而是使用 Node::create() 方法。
auto node = Node:create();//创建Node对象
一些设置Node属性的常用方法
就简单写几个,基本上所有属性都能够通过方法去设置,更多的就看文档或者直接看源码。
node->setTag();
node->setName();
node->setPosition();
偷懒宏: CREATE_FUNC
该宏用来为一个类似CCLayer类的特定的类增加一个create函数。
那create函数里做了什么呢?
它执行了类的构造函数,执行了init()初始化函数。
最后又设置创建出的对象为自动释放内存。
这样其他人在使用这个类的时候,只要是用create()函数创建出来的对象就不用费心去管理释放内存了,它封装了c++的内存管理机制。
该宏所在的文件路径:
项目根目录\cocos2d\cocos\platform\CCPlatformMacros.h
该宏的代码:
/** @def CREATE_FUNC(__TYPE__)
* Define a create function for a specific type, such as Layer.
*
* @param __TYPE__ class type to add create(), such as Layer.
*/
#define CREATE_FUNC(__TYPE__) \
static __TYPE__* create() \
{ \
__TYPE__ *pRet = new(std::nothrow) __TYPE__(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = nullptr; \
return nullptr; \
} \
}
比如我们创建一个场景类时,我们在声明的时候就需要用到这个宏定义来为类添加一个create方法。