博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cocos2D-x权威指南:核心类成员CCNode
阅读量:5928 次
发布时间:2019-06-19

本文共 4139 字,大约阅读时间需要 13 分钟。

节点类(CCNode)是Cocos2D-x中的主要类,继承自CCObject。继承关系如图3-2所看到的。




不论什么须要画在屏幕上的对象都是节点类。

最经常使用的节点类包含场景类(CCScene)、布景层类(CCLayer)、人物精灵类(CCSprite)、菜单类(CCMenu)。

CCNode类包含的主要功能例如以下:

  • 每一个节点都能够含有子节点。这点本书也会在后面给出演示样例。
  • 节点含有周期性回调的方法(Schedule、Unschedule等)。(关于周期性回调方法,本章将会有一节单独解说。假设如今不了解。能够跳过这段内容。

  • 能够含有动作(CCAction)。
CCNode能够为它自己和它的子节点加入额外的功能。不管是CCNode执行的动作(CCAction),还是设置的旋转角度和位置等属性,父节点的设置都能够传递到子节点上,这点在一些游戏的开发中能够使我们的管理更轻松。比方某些纵版射击游戏,玩家控制的主角飞机须要携带子机。子机的移动位置要随着主机一起移动,我们就能够把子机设置为主机的子节点,这样,在设置位置的时候,仅仅须要设置主机的位置就能够了。大大降低了程序猿须要处理的内容。提高了代码的清晰度和可读性。


因为CCNode类不自带贴图。事实上在屏幕上看不到不论什么节点类的效果。所以一般使用CCNode类的场合有两个:第一个情况就是,须要一个父节点来管理一批子节点。这时候能够设置一个“无形”的子节点来管理子节点;还有一种情况就是有时须要自定义一个在屏幕上显示的对象。这时候让新定义的这个类继承自CCNode。一个类继承自CCNode类,说明它有例如以下特点:

  • 重写初始化的方法和周期性回调方法。
  • 在时间线上控制回调。

  • 重写渲染的绘制方法。

CCNode类不含有贴图,它能够进行位置的平移、大小的伸缩变化、旋转变化。

在网格特效(会在后面的章节介绍)使用的时候,网格特效能够获得屏幕中绘制的内容,而且对获得的屏幕内容进行渲染。这一点在游戏中须要一些全屏特效的时候能够使用。

CCNode是Cocos2d-x画图的基本单位。CCScene、CCLayer、CCMenu、CCSprite都继承自CCNode,CCNode节点都具有下面特征:

1、每一个节点都能够通过addChild方法包括子节点、通过removeChild删除节点。
2、每一个节点的子节点都能够设置标记,通过getChildByTag来获取节点。
3、每一个节点都能够运行计划任务,在Cocos2d-x的系统循环中处理这些任务。

4、每一个节点都能够通过runAction运行瞬时动作和延时动作。
5、每一个节点加入到场景中,当所在场景为激活场景时,这个节点的画图方法会被自己主动调用完毕自我绘制。

class CC_DLL CCNode : public CCObject      {      protected://属性列表          float m_fRotationX;                 ///x轴旋转角度          float m_fRotationY;                 ///y轴旋转角度          float m_fScaleX;                    ///x轴缩放比例          float m_fScaleY;                    ///y轴缩放比例          float m_fVertexZ;                   ///z轴设置          CCPoint m_obPosition;               ///节点坐标          float m_fSkewX;                     ///x轴扭曲角度          float m_fSkewY;                     ///y轴扭曲角度          CCPoint m_obAnchorPointInPoints;    ///锚点坐标          CCPoint m_obAnchorPoint;            ///缺省锚点坐标              CCSize m_obContentSize;             ///节点大小              CCAffineTransform m_sAdditionalTransform; ///变换信息          CCAffineTransform m_sTransform;     ///变换信息          CCAffineTransform m_sInverse;       ///变换信息          CCCamera *m_pCamera;                ///摄像头对象          CCGridBase *m_pGrid;                ///网格对象          int m_nZOrder;                      ///Z轴设置,影响图层顺序              CCArray *m_pChildren;               ///全部子节点          CCNode *m_pParent;                  ///所在父节点          int m_nTag;                         ///当前节点标识              void *m_pUserData;                  ///用户调用指针          CCObject *m_pUserObject;            ///用户调用对象          CCGLProgram *m_pShaderProgram;      ///OpenGL shader          ccGLServerState m_eGLServerState;   ///OpenGL servier side state          unsigned int m_uOrderOfArrival;     ///              CCScheduler *m_pScheduler;          ///调度类完毕计划任务调度              CCActionManager *m_pActionManager;  ///动作管理器              bool m_bRunning;                    ///标识当前节点是否在执行          bool m_bTransformDirty;             ///< transform dirty flag          bool m_bInverseDirty;               ///< transform dirty flag          bool m_bAdditionalTransformDirty;   ///          bool m_bVisible;                    ///标识当前节点是否可见          bool m_bIgnoreAnchorPointForPosition; ///在CCLayer和CCScene中使用              bool m_bReorderChildDirty;          ///记录子节点的 dirty flag          int m_nScriptHandler;               ///在Javascript 和 Lua 编程使用          int m_nUpdateScriptHandler;         ///在Javascript 和 Lua 编程使用                   ccScriptType m_eScriptType;         ///标识Javascript或Lua 脚本          CCComponentContainer *m_pComponentContainer;  ///组件字典          .......      }

通过属性列表,我们了解到CCNode具有下面属性:

   -坐标 position  

   -缩放 scale (x, y)  
   -旋转rotation (in degrees, clockwise)  
   -摄像机CCCamera (an interface to gluLookAt )  
   -网格 CCGridBase (to do mesh transformations)  
   - 锚点anchor point  
   - 尺寸size  
   - 可见性visible  
   - 层次设定z-order  
   - openGL z轴位置  
这些属性的缺省值设定例如以下:
    - 旋转rotation: 0  
    - 坐标position: (x=0,y=0)  
    - 缩放scale: (x=1,y=1)  
    - 尺寸contentSize: (x=0,y=0)  
    - 锚点anchorPoint: (x=0,y=0)  
     - 一个新的CCNode对象没有不论什么纹理  
在CCNode对象创建完毕的时候。能够实现下面操作:
1、变换坐标 translated (position)
2、变化角度rotated (rotation)
3、变换尺寸 scaled (scale)
4、变换显示状态 (camera)
http://book.2cto.com/201304/19781.html

本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5206198.html,如需转载请自行联系原作者

你可能感兴趣的文章
虚拟机 Linux
查看>>
find 下参数的关系默认是and 一个参数多个选项可以用 -or
查看>>
安卓桌面分页
查看>>
[MicroPython]F407控制DS3231读取时间、温度
查看>>
Markdown测试
查看>>
mysql之分页存储过程实例
查看>>
[IPA]IOS In App Purchase(内购)验证
查看>>
5.3、Android Studio录像
查看>>
俺的新书《Sencha Touch实战》终于出版了
查看>>
【mybatis】mybatis 查询mysql 长编码的查询使用 正向查询和反向查询,避免数据库关系 递归查询的 解决方案...
查看>>
使用GDAL下载并转换SRTM的DEM数据(二)
查看>>
Yii2 引入 css js
查看>>
Android系统Google Maps开发实例浅析
查看>>
实例 | 能源区块链、物联网技术在智能电网中的趋势及前沿应用
查看>>
Valgrind 例子
查看>>
SignalR
查看>>
password
查看>>
CSS浮动专题!
查看>>
adb的使用
查看>>
深浅拷贝
查看>>