任何需要画在屏幕上的对象都是节点类。最常用的节点类包括场景类(CCScene)、布景层类(CCLayer)、人物精灵类(CCSprite)、菜单类(CCMenu)。
CCNode类包括的主要功能如下:
- 每个节点都可以含有子节点,这点本书也会在后面给出示例。
- 节点含有周期性回调的方法(Schedule、Unschedule等)。(关于周期性回调方法,本章将会有一节单独讲解,如果现在不了解,可以跳过这段内容。)
- 可以含有动作(CCAction)。
由于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