一、概述
CCNode.h文件由三部分组成:两个枚举类型、CCNode自身定义、继承自CCNode和CCRGBAProtocol的类CCNodeRGBA。源码如下,已有英文注释,另有少量我自己的注释:
1、两个枚举类型
enum {
kCCNodeTagInvalid = -1,};
enum {
kCCNodeOnEnter,kCCNodeOnExit,kCCNodeOnEnterTransitionDidFinish,kCCNodeOnExitTransitionDidStart,kCCNodeOnCleanup
};
2、CCNode自身定义
略
3、CCNodeRGBA
class CC_DLL CCNodeRGBA : public CCNode,public CCRGBAProtocol
{
public:
CCNodeRGBA();
virtual ~CCNodeRGBA();
virtual bool init();
virtual GLubyte getOpacity();
virtual GLubyte getDisplayedOpacity();
virtual void setOpacity(GLubyte opacity);
virtual void updateDisplayedOpacity(GLubyte parentOpacity);
virtual bool isCascadeOpacityEnabled();
virtual void setCascadeOpacityEnabled(bool cascadeOpacityEnabled);
virtual const ccColor3B& getColor(void);
virtual const ccColor3B& getDisplayedColor();
virtual void setColor(const ccColor3B& color);
virtual void updateDisplayedColor(const ccColor3B& parentColor);
virtual bool isCascadeColorEnabled();
virtual void setCascadeColorEnabled(bool cascadeColorEnabled);
virtual void setOpacityModifyRGB(bool bValue) {};
virtual bool isOpacityModifyRGB() { return false; };
protected:
GLubyte _displayedOpacity;
GLubyte _realOpacity;
ccColor3B _displayedColor;
ccColor3B _realColor;
bool _cascadeColorEnabled;
bool _cascadeOpacityEnabled;
};
二、分析
1、通过两个枚举类型的命名方式和意思,推测应该是类似于发送通知时的消息,暂不细究
2、CCNode和CCDirector一样继承自CCObject,但是CCNode要比CCDirector“家大业大”得多。几乎所有和渲染有关的类都继承自CCNode。虽然CCNode自身不能渲染绘制任何图像,但是除此之外的功能,CCNode几乎已经全了。详细如下:
(1)属性包括:位置、缩放、角度、锚点、大小、z-order
(2)拥有添加、移除子节点的各种重载方法、获得/设置父节点的方法
(3)开启、暂停、关闭、获取、设置定时器的各种方法
(4)执行、停止动作的各种重载方法
(5)onEnter、onExit方法第一次出现(另外两个暂时不管)
(6)几乎所有方法都是虚函数;另,类树该分支上第一次出现的被子类广泛覆盖的初始化虚函数:init()
3、CCNodeRGBA继承自CCNode,自然拥有了CCNode的一切开放的方法和属性;除此之外,从另一个父类CCRGBAProtocol上继承了设置透明度和颜色的方法。后面要介绍到的CCSprite,其父类就是CCNodeRGBA,以及另一个类CCTextureProtocol,这也是为什么精灵可以设置透明度和颜色的原因。
三、总结 1、知道了CCNode虽然不能渲染任何图像,但是身为节点的功能已十分完善 2、知道了透明度和颜色设置来源于CCNodeRGBA