当前位置:主页 > 查看内容

Cocos2dx-c++杂记

发布时间:2021-04-23 00:00| 位朋友查看

简介:Cocos2dx-C 4.x 什么是Node类 Node类详情 Node类的源文件目录 Node类的一些常用属性 创建Node对象 一些设置Node属性的常用方法 偷懒宏 CREATE_FUNC 什么是Node类 Node类是Cocos2dx的基类像游戏中的 场景类、精灵类、文本类、菜单类、层类 等都是继承自Node。……

什么是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方法。

;原文链接:https://blog.csdn.net/qq_19864679/article/details/115410331
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐