Cocos2D-x权威指南:核心类成员CCNode

节点类(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值