Cocos2d-x基础:CCNode


CCNode的特点:
1、它能够有子节点
2、它能处理有周期性的回调函数
3、它能执行CCAction动作

任何在cocos2d-x中可以看见的对象都是CCNode,并且任何看不见的,但是拥有坐标的对象都是CCNode。
在cocos2d-x中,CCObject无处不在,其实CCObject只是提供生命而已,真正无处不在的是CCNode!它组织了整个cocos2d-x程序的树形结构,有利于管理和画面渲染等。

在上面,我们有一句定义CCNode的话,但是那些CCNode是指的CCScene, CCLayer, CCSprite, CCMenu。CCNode本身是不会直接被使用的,除非有特殊要求。CCNode自己没有贴图功能,我看不见的一个对象。它的作用很直接:为Cocos2d-x提供了一个显示对象的管理方法----树形结构。

 

我们只是学会使用Cocos2d-x就够了,因此涉及到复杂的实现就不管了。

virtual bool init(); // 初始化一个节点
CCNode * CCNode::create(void); // 使用静态方法创建一个新的节点,并设置自动释放(autoRelease)
const char* CCNode::description(); // 获得CCNode的Tag
virtual void setZOrder(int zOrder); //  设置节点z值(显示的前后关系),并记录这个节点所在父节点中的位置
virtual void _setZOrder(int z);  // 设置z值
virtual int getZOrder(); // 获得z值
virtual void setScaleX(float fScaleX); // X坐标上的缩放
virtual float getScaleX();
virtual void setScaleY(float fScaleY); // Y坐标上的缩放
virtual float getScaleY();
virtual void setScale(float scale); // 整体的缩放
virtual float getScale();
virtual void setPosition(const CCPoint &position); // 设置节点在OpenGL坐标系中的坐标(左下角是0,0)
virtual const CCPoint& getPosition();
void  setPositionX(float x);
float getPositionX(void);
void  setPositionY(float y);
float getPositionY(void);
virtual void setSkewX(float fSkewX); // 设置X方向的扭曲
virtual float getSkewX(); 
virtual void setSkewY(float fSkewY); // 设置Y方向的扭曲
virtual float getSkewY();
virtual void setAnchorPoint(const CCPoint& anchorPoint); // 锚点
virtual const CCPoint& getAnchorPoint();
virtual void setContentSize(const CCSize& contentSize); // 设置节点的大小
virtual const CCSize& getContentSize();
virtual void setVisible(bool visible); // 设置是否可见
virtual bool isVisible(); // 判断是否可见
virtual void setRotation(float fRotation); // 设置旋转
virtual float getRotation();
virtual void setRotationX(float fRotaionX);  virtual float getRotationX();
virtual void setRotationY(float fRotationY) virtual float getRotationY();
virtual void setOrderOfArrival(unsigned int uOrderOfArrival); // 如果有多个子节点的Z值相等,那么设置这个值,数值越小,绘制越前。
virtual unsigned int getOrderOfArrival();
 
virtual void setGLServerState(ccGLServerState glServerState); // Sets the state of OpenGL server side。。。。。。。。暂时不理解
virtual ccGLServerState getGLServerState();
 
 virtual void ignoreAnchorPointForPosition(bool ignore);  // 设置“忽略锚点的坐标”,锚点坐标设置为(0,0)
virtual bool isIgnoreAnchorPointForPosition();
 
virtual void addChild(CCNode * child); // 添加子节点
virtual void addChild(CCNode * child, int zOrder);
virtual void addChild(CCNode* child, int zOrder, int tag);
CCNode * getChildByTag(int tag); // 根据标识名来获取子节点
virtual CCArray* getChildren(); // 获得所有子节点,并保存在CCArray中
 
unsigned int getChildrenCount(void); // 获得子节点的数量
 
virtual void setParent(CCNode* parent); // 设置父节点
virtual CCNode* getParent();
 
virtual void removeFromParent(); // 把自己从父节点中移除
virtual void removeFromParentAndCleanup(bool cleanup); // 把自己从父节点中移除,如果为ture,则停止这个节点的所有动作和回调
 
virtual void removeChild(CCNode* child); // 移除子节点,并清理
virtual void removeChild(CCNode* child, bool cleanup); // 移除子节点,并判断是否进行清理
irtual void removeChildByTag(int tag);
virtual void removeChildByTag(int tag, bool cleanup);
 
virtual void removeAllChildren(); // 移除所有子节点,并清理
virtual void removeAllChildrenWithCleanup(bool cleanup); // 移除所有子节点,ture则清理所有节点
 
virtual void reorderChild(CCNode * child, int zOrder); // 设置子节点的Z值
 
virtual void sortAllChildren(); // 绘制之前对子节点进行排序,可以提高性能。但不要手动受使用,除非在一帧内,一个子节点被添加再被移除。
 


 

 

中见有些方法暂时没必要看

 

当节点每次进入舞台时被调用,如果子类要重写,方法中必须加上CCNode::onEnter()

virtual void onEnter();
OnEnter调用之后,方法中必须加上CCNode::onEnterTransitionDidFinish()

virtual void onEnterTransitionDidFinish();
当节点每次离开舞台后被调用,如果子类要重写,方法中必须加上CCNode::onExit()

virtual void onExit();

当节点离开舞台时调用,如果子类要重写,方法中必须加上CCNode::onExit()

virtual void onExitTransitionDidStart();


 

virtual void draw(void);
CCAction* runAction(CCAction* action);
void stopAllActions(void);
void stopAction(CCAction* action);
void stopActionByTag(int tag);
CCAction* getActionByTag(int tag);
unsigned int numberOfRunningActions(void);  // 翻译动作的个数

virtual void setScheduler(CCScheduler* scheduler); // 设置定时器
virtual CCScheduler* getScheduler(); 
bool isScheduled(SEL_SCHEDULE selector); // 是否定时器已经被调用
void unscheduleUpdate(void); //取消定时器
void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay);  // 自定义一个定时器,每隔interval在delat时间后调用repeat+1次
void schedule(SEL_SCHEDULE selector, float interval);   
void scheduleOnce(SEL_SCHEDULE selector, float delay);
void schedule(SEL_SCHEDULE selector);
void unschedule(SEL_SCHEDULE selector);
void unscheduleAllSelectors(void);
void resumeSchedulerAndActions(void);  // 暂停所有计时器和动作
void pauseSchedulerAndActions(void);   // 恢复所有计时器和动作
virtual void update(float delta);  // 每帧调用一次,前提是scheduleUpdate()被调用





CCNode还提供了坐标系的操作。(这是当然的,因为CCNode是显示对象)

坐标系的转换一般会涉及到两个方法,那就是世界坐标系和节点坐标系的转换。

 

1、世界坐标系

2、节点坐标系(本地坐标系)(根节点与OpenGL坐标系相同)

3、OpenGL坐标系

 


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值