前面用cocos2d-x完成了一个简单的demo,已经对使用cocos2d-x开发游戏有了一个大概的认识,现在来学习cocos2d-x中的常用类CCNode。学习cocos2d-x应该先了解它的整体结构,从大方向出发再逐步掌握细节问题,分而治之。cocos2d-x的类采用的是树状继承的方式,CCNode类是一个比较核心的类,下图是类结构图:

CCObject类是cocos2d-x中所有对象的基类,可以理解成java中的Object类,它封装了对象的引用计数和自动释放功能。从上图可知,CCNode是场景、层、菜单、精灵等所有节点的父类,而我们在使用cocos2d-x开发游戏时,接触的最多的就是场景、层、精灵这些东东,所以擒贼先擒王,下面就来了解一下CCNode内部包含的主要函数,在后期开发中会经常使用这些函数。

//获取节点的顺序,ZOrder:节点的Z轴,当有多个节点在屏幕显示时,引擎会根据它们Z轴的大小决定绘制顺序,Z轴大的会盖住Z轴小的
virtual int getZOrder(void)
//获取节点的位置(x,y)
virtual const CCPoint& getPosition(void)
//设置节点的位置
virtual void setPosition(const CCPoint &var)
//获取其对应的摄像机,因为cocos2d-x是通过3D方式绘制2D效果的
virtual CCCamera* getCamera(void)
//判断节点是否可见
virtual bool getIsVisible(void)
//设置节点可见性
virtual void setIsVisible(bool var)
//获取节点的锚点的位置
virtual const CCPoint& getAnchorPoint(void)
//设置节点的锚点位置
virtual void setAnchorPoint(const CCPoint &var)
//获取节点的尺寸,无论节点时缩放还是旋转,尺寸不变。层和场景的尺寸是屏幕的大小
virtual const CCSize& getContentSize(void)
//设置节点的尺寸
virtual void setContentSize(const CCSize &var)
//判断节点是否在运行
virtual bool getIsRunning(void)
//获取父节点
virtual CCNode* getParent(void)
//获取节点的tag
virtual int getTag(void)
//设置节点的tag
virtual void setTag(int var)

//创建和初始化一个节点,该节点会自动释放
static CCNode * node(void);
//节点开始进入舞台时执行
virtual void onEnter();
//节点进入舞台后执行
virtual void onEnterTransitionDidFinish();
//节点离开舞台时执行
virtual void onExit();
//添加子节点,z-order默认值为0
virtual void addChild(CCNode * child);
//添加子节点,指定z-order值
virtual void addChild(CCNode * child, int zOrder);
//添加子节点,指定z-order值和tag
virtual void addChild(CCNode * child, int zOrder, int tag);
//从父节点中删除当前节点,如果cleanup为true则清除当前节点的所有动作及回调函数;如果当前节点没有父节点则什么也不做
void removeFromParentAndCleanup(bool cleanup);
//删除指定节点,如果cleanup为true则清除指定节点的所有动作
virtual void removeChild(CCNode* child, bool cleanup);
//通过tag删除节点,如果cleanup为true则清除该节点的所有动作
void removeChildByTag(int tag, bool cleanup);
//删除所有子节点,如果cleanup为true则清除节点的所有动作
virtual void removeAllChildrenWithCleanup(bool cleanup);
//通过tag获取节点
CCNode * getChildByTag(int tag);
//重新给指定节点的zOrder赋值
virtual void reorderChild(CCNode * child, int zOrder);
//清除所有动作及任务调度函数
virtual void cleanup(void);
//绘制节点自己
virtual void draw(void);
//递归visit和draw子节点
virtual void visit(void);
//返回节点对象的矩形框(由坐标和宽高组合而成)
CCRect boundingBox(void);
//执行动作
CCAction* runAction(CCAction* action);
//停止所有的动作
void stopAllActions(void);
//从动作序列中删除指定动作
void stopAction(CCAction* action);
//通过tag删除动作
void stopActionByTag(int tag);
//通过tag获取动作
CCAction* getActionByTag(int tag);
//执行节点的update函数,每帧都执行
void scheduleUpdate(void);
//取消执行节点的update函数
void unscheduleUpdate(void);
//定义一个定时器,每帧调用一次指定函数
void schedule(SEL_SCHEDULE selector);
//定义一个定时器,可以每隔一定的时间调用一次指定函数
void schedule(SEL_SCHEDULE selector, ccTime interval);
//取消一个定时器
void unschedule(SEL_SCHEDULE selector);
//取消所有定时器,包括scheduleUpdate,不影响动作
void unscheduleAllSelectors(void);
//恢复所有定时器和动作
void resumeSchedulerAndActions(void);
//暂停所有定时器和动作
void pauseSchedulerAndActions(void);

 

cocos2d-x手游性能优化总结

近段时间在使用cocos2d-x开发2D手游,技术方案使用的是cocos2d-x+lua,因为游戏使用的是cocos2d-x 2.1.5版本,有些优化方案在最新版的cocos2d-x版本已经实现...

阅读全文

cocos2dx-html5 实现网页版flappy bird游戏

我也是第一次使用cocos2d_html5,对js和html5也不熟,看引擎自带的例子和引擎源码,边学边做,如果使用过cocos2d-x的话,完成这个游戏还是十分简单的。游戏体...

阅读全文

【cocos2d-x开发实战 特训99-终结篇】移植到android平台和添加admob广告

上一篇已经完成特性99在win32平台下的开发,现在把它移植到android上,首先修改Android.mk文件,内容如下: LOCAL_PATH := $(call my-dir) include $(CLEAR_...

阅读全文

欢迎留言