Cocos2d-x3.0 Node源码学习

一、继承关系图


二、简介

Node类继承自Ref类。作为父类,包括以上图中子类

1、Public成员函数

(1)virtual bool isRunning() const:返回节点是否活动。如果是running,它将会允许事件回调就像onEnter()、onExit()、update()
(2)void scheduleUpdateWithPriorityLua(int handler,int priority):暂时略过
(3)virtual void cleanup():暂停所有活动着的动作和调度器。被ProtectedNode和TransitionScene重载
(4)virtual void draw(Renderer* renderer,const Mat4 &transform,bool transformUpdated):重写该方法绘制自己的节点。以下的GL状态是默认开启的,并且任何时候都不能关闭,如果你开启了其他的GL状态,那么你要在绘制完自己的节点后关闭他们。
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D); 
被  TransitionFadeTR TransitionSplitCols TransitionTurnOffTiles TransitionCrossFade Sprite LayerColor , Label RenderTexture SpriteBatchNode PhysicsSprite ProgressTimer ParticleSystemQuad , ParticleBatchNode TransitionScene DrawNode MotionStreak VideoPlayer TransitionPageTurn , AtlasNode  , 以及  PhysicsDebugNode  重载.
(5)virtual void draw() final
(6)virtual void visit(Renderer* renderer,const Mat4 &parentTransform,bool parentTransformUpdated):访问节点的孩子,并且循环递归的绘制它们。被 EditBoxScale9SpriteLabelWidgetLayoutScrollViewTextFieldTTFRenderTextureLabelTTF,SpriteBatchNodeProtectedNodeRichTextClippingNodeParticleBatchNodeParallaxNode , 以及NodeGrid 重载。
(7)virtual void visit() final
(8)virtual Scene* getScene():返回包含Node节点的Scene,如果这个节点不属于任何场景,返回nullptr,这个函数循环调用parent->getScene(),知道父类是一个Scene对象。被Scene重载。
(9)virtual Rect getBoundingBox() const:返回一个AABB(轴向包围盒)在它的父坐标系中。被Label、Armature、LabelTTF、LabelIBMFont、Skeleton重载。
(10)virtual CC_DEPRECATED_ATTRIBUTE Rect boundingBox()const:弃用,被
(11)virtual  void setEventDispatcher(EventDispatcher* dispatcher):注册监听事件
(12)virtual EventDispatcher* getEventDispatcher() const:获取事件监听
(13)virtual GLubyte getOpacity() const:被 __NodeRGBAWidget__LayerRGBAControlButtonProgressTimer , 以及 MotionStreak 重载。获取透明度,对应的virtual void setOpacity(GLubyte opacity):设置透明度
(14)virtual GLubyte getDisplayedOpacity() const:暂时略过,被 __NodeRGBA , 以及 __LayerRGBA 重载.
(15)virtual void updateDisplayOpacity(GLubyte parentOpacity):暂时略过。
(16)virtual bool init():图形属性的设置函数。
(17)vitrual void setLocalZOrder(int localZOrder):LocalZOrder:是分辨节点和它兄弟节点的。父节点通过LocalZOrder的值来分辨所有的子节点,如果先加入的子节点数组节点将会显示在后面加入的节点的前面。virtual int getLocalZOrder() const 获取局部Z轴顺序,相对于兄弟节点。
(18)virtual void setGlobalZOrder(float globalZorder):定义渲染节点的顺序,拥有全局Z顺序,越小的节点最先渲染。假如两个或者更多的节点拥有相同的全局Z顺序,那么渲染顺序是无法保证的,唯一的例外是如果节点的全局Z顺序为0,那么场景图顺序是可以使用的。默认的,所有的节点的全局Z顺序都是0,即默认使用场景图顺序来渲染节点。virtual void _setLocalZOrder(int z):设置全局Z顺序。virtual int getGlobalZOrder() const,返回节点的全局Z顺序。
(19)CC_DEPRECATED_ATTRIBUTE void setZOrder(int localZOrder):设置ZOrder顺序。virtual CC_DEPRECATED_ATTRIBUTE int getZOrder()const。
(20)virtual void getScaleX(float scaleX)与virtual float getScaleX()const: 缩放操作。当scaleX为负时,节点翻转并改变锚点。被Sprite、ParticleSystem、Label重载。get操作被Label重载。X与Y、Z使用方法一致,但是Z轴操作没有被Label重载。getScale(),setScale()
(21)virtual void setPosition(const Vec2& position)与virtual const Vec2& getPosition()const:设置/获取节点在父节点的位置。相对于父节点的锚点。
(22)virtual void setPosition(float x,float y)与virtual void getPosition(float* x,float* y)const:使用x,y比使用Vec2对象效率要高很多。建议使用。
(23)setPositionX/Y/与getPositionX/Y:设置或获取子节点相对于父节点锚点的X轴方向与Y轴方向位置。
(24)virtual void setPosition3D(const Vec3 &position)与virtual Vec3 getPosition3D()const:设置或获取子节点在父节点中相对于锚点的位置。
(25)virtual void setRotationSkewX(float rotationX):设置节点X轴的选择角度,表现为水平选择倾斜。setRotationalSkew和setSkew的不同是前一个是模拟flash的倾斜功能,后一个是真正的倾斜功能。负数:节点顺时针选择,正数:节点逆时针旋转。
(26)virtual  void setAnchorPoint(const Vec2& anchorPoint):设置锚点。对应的virtual const Vec2& getAnchorPoint()const
(27)virtual const Vec2& getAnchorPointInPoints();返回绝对像素的锚点。
(28)virtual void setContentSize(const Size& contentSize):设置未转换节点的大小,被EditBox、LayerColor、Scale9Sprite及ScrollView重载。
(29)virtual const Size& getContentSize() const:返回未转换节点的大小。
(30)virtual void setVisible(bool visible):设置节点是否可见。virtual bool isVisible()const:返回是否可见。Sprite、EditBox、VideoPlayer重载。
(31)virtual void setRotation(float rotation)设置节点的旋转角度。默认值为0,负数顺时针旋转节点。正数逆时针旋转节点。被Sprite、ParticleSystem、PhysicsSprite重载。virtual float getRotation()const:返回节点旋转角度。
(32)virtual void setRotation3D(const Vec3& rotation)设置(X、Y、Z)旋转角度。virtual Vec3 getRotation3D() const
(33)virtual void setRotationSkewX(float rotationX)与virtual float getRotationSkewX()const:设置节点X轴的旋转角度,表现为水平旋转倾斜,被Sprite重载。负数表示顺时针旋转,正数表示逆时针旋转。以下类似。
(34)virtual CC_DEPRECATED_ATTRIBUTE void setRotationX(float rotationX)与CC_DEPRECATED_ATTRIBUTE float getRotationX()const:
(35)virtual void setRotationSkewY(float rotationY)与virtual float getRotationSkewY() const:设置Y轴节点的旋转角度。表现为垂直旋转倾斜。被Sprite重载。
(36)virtual CC_DEPRECATED_ATTRIBUTE void setRotationY(float rotationY)与virtual CC_DEPRECATED_ATTRIBUTE float getRotationY() const
(37)virtual void ignoreAnchorPointForPosition(bool ignore):设置锚点
(38)virtual void addChild(Node* child):添加子节点到容器,ZOrder为0.
(39)virtual Node* getChildByTag(int Tag):从容器中通过Tag获得节点。
(40)virtual Vector<Node*>& getChildren():返回子节点数组。ScrollView、ListView、PageView重载。
(41)virtual ssize_t getChildrenCount()const:返回子节点总数。
(42)virtual Node* getParent():返回指向父节点的指针。virtual const Node* getParent()const:
(43)virtual void removeFromParent():从父节点中删除一个节点,有一个cleanup参数,如果这个节点是一个孤节点,什么也不发生。
(44)virtual void removeFromParentAndCleanup(bool cleanup):从父节点删除一个节点,如果这个节点是一个孤节点,什么也不发生,如果cleanup true:在这个节点上得所有动作和回调函数都会被删除。false就不会删除。
(45)virtual void removeChild(Node* child,bool cleanup = true):从容器中删除一个子孩子。取决于cleanup参数同时会清除所有的活动的动作。
(46)virtual void removeChildByTag(int tag,bool cleanup = true):从容器删除Tag为tag的孩子。cleanup决定删除所有的活动动作。
(47)virtual void removeAllChildren():删除所有孩子。同时清除所有动作。被ScrollView、Layout、ListView、PageView重载。
(48)virtual void removeAllChildrenWithCleanup(bool cleanup):删除容器中所有孩子,cleanup决定是否清除所有活动动作。
(49)virtual void reorderChild(Node* child,int localZOrder):对一个孩子重新排序,设定一个新的Z轴值。child为已添加的子节点,localZOrder为z轴顺序。被Sprite、SpriteBatchNode、ParticleBatchNode重载。
(50)virtual void sortAllChildren():在绘图之前,排列所有的孩子数组一次,而不是每次添加或者删除节点都排序。不要手动调用此方法,除非一个添加过的子节点将要被删除。
Tag与User数据
(51)virtual int getTag()const :返回Tag值。对应setTag();
(52)virtual void* getUserData()与virtual void setUserData(void* userData):返回一个自定义用户数据指针。设置一个自定义用户数据指针。随意设置UserData指针为一个数据块、结构体、或者一个对象等等。但是要注意释放内存。
(53)virtual Ref* getUserObject()与virtual void setUserObject(Ref* userObject):返回一个用户分配对象。设置一个用户分配对象。
GLProgram
(54)GLProgram* getGLProgram():返回当前用于这个节点的GLProgram(shader)
(55)CC_DE{RECATED_ATTRIBUTE GLProgram* getShaderProgram():暂时略过
(56)GLProgramState* getGLProgramState():暂时略过
(57)void setGLProgramState(GLProgramState* glProgramState):暂时略过
(58)void setGLProgram(GLProgram* glprogram):为此节点设置着色程序,从v2.0开始,每一个渲染的节点必须设置它自己的着色器程序,他应该在初始化阶段被设置。如node->setGLrProgram(GLProgramCache::getInstance()->getProgram(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR));shaderProgra:着色器程序。
(59)CC_DEPRECATED_ATTRIBUTE void setShaderProgram(GLProgram* glprogram):
Event Callbacks
(60)virtual void onEnter():每次当Node进入stage时调用的回调事件,如果Node进入stage状态时伴随着一个转换,那么事件将会在转换开始的时候被调用,在onEnter过程中,你不能够接入兄弟节点,如果重写onEnter,需调用onEnter()
(61)virtual void onEnterTransitionDidFinish():每次当Node进入stage时调用的回调事件函数。重写需调用父类函数
(62)virtual void onExit():每次当Node离开stage时才调用的事件回调。如果Node离开stage状态时伴随着一个转换,那么事件将会在转换结束的时候调用。在onEnter中不能接入一个兄弟节点,重写需调用父类onExit();
(63)virtual void onExitransitionDidStart():同上,ProtectedNode、ClippingNode重载。
Actions
(64)virtual void setActionManager(ActionManger* actionManager):设置被所有动作使用的ActionManager对象,一旦设置新的,之前的动作将被删除。
(65)virtual ActionManager* getActionManager():获取ActionManager对象
(66)virtual const ActionManager* getActionManager()const:同65
(67)Action* runAction(Action* action):执行一个动作,并返回执行的该动作。这个节点会变成动作的目标。
(68)void stopAllActions():停止并删除所有的活动的动作。
(69)void stopAction(Action* action):停止并且删除参数指定的动作
(70)void stopActionByTag(int tag):停止并删除Tag值指定的动作。
(71)Action* getActionByTag(int tag):获取Tag指定的动作。
(72)ssize_t getNumberOfRunningActions() const:返回活动着的动作加上正在调度运行的动作的总数。
(73)CC_DEPRECATED_ATTRIBUTE ssize_t numberOfRunningActions() const:
Scheduler and Timer
(74)virtual void setScheduler(Scheduler* scheduler):设置一个调度器对象用来调度所有的update和定时器。设置新调度器之前的将被删除。
(75)virtual Scheduler* getScheduler():得到调度器独享
(76)bool isScheduled(SEL_SCHEDULE selector):检查是否一个调度器是预定的
(77)void scheduleUpdate(void):调度update方法,它将使用顺序数字0,这个方法在每一帧都被调用一次,拥有低顺序值的调度方法将会在高顺序值的方法之前调用。
(78)void scheduleUpdateWithPriority(int priority):调度这个update方法,伴随着一个自定义优先级。这个调度器将会在每一帧被调用。
(79)void unscheduleUpdate(void):
(80)void schedule(SEL_SCHEDULE selector,float interval,unsigned int repeat,float delay):调度一个自定义的选择器,如果选择器已经被调度了,那么内部的参数将会被更新而不再次调度一遍。参数依次为:将被调用的方法、时间间隔、执行次数、第一个时间间隔开始执行前的等待时间。      经典用法:
void MyNode::TickMe(float);
this->schedule(schedule_selector(MyNode::TickMe),0,0,0);
(81)void scheduler(SEL_SCHEDULE selector,float interval):参见80
(82)void scheduleOnce(SEL_SCHEDULE selector,float delay):参见80
(83)void scheduler(SEL_SCHEDULE selector):参见80,时间间隔为每帧
(84)void unschedule(SEL_SCHEDULE selector):不调度一个自定义的选择器。
(85)void unscheduleAllSelectors(void):不调度所有调度过的选择器,自定义选择器和update选择器。
(86)void resume(void):恢复所有的调度过得选择器,动作和事件监听,这个方法在onEnter方法内部调用。
(87)void pause(void):暂停所有调度过的选择器,动作和事件监听,这个方法在onExit方法内部调用。
(88)CC_DEPRECATED_ATTRIBUTE void resumeSchedulerAndActions(void):
(89)CC_DEPRECATED_ATTRIBUTE void pauseSchedulerAndActions(void):
(90)virtual void update(float delta):
(91)Vec2 convertToNodeSpace(const Vec2& worldPoint)const:将Vec2转换成节点空间坐标系。
(92)Vec2 convertToNodeSpaceAR(const Vec2& worldPoint) const:将Vec2转成节点空间坐标系,将return或received节点的point当作响应的锚点。
(93)Vec2 convertTouchToNodeSpace(Touch* touch) const:一个方便的方法,将触摸转换成Vec2
(94)Vec2 converTouchToNodeSpaceAR(Touch* touch) const:将Touch转成局部坐标系,这个方法是相对锚点。
(95)Vec2 convertToWindowSpace(const Vec2&nodePoint)const:转换cocos2d坐标系到用户界面坐标。
(96)Vec2 convertToWorldSpace(const Vec2 &nodePoint) const:将Vec2转成世界空间坐标系。
(97)Vec2 convertToWorldSpaceAR(const Vec2& nodePoint) const:将局部的Vec2转换成事件空间坐标系。
(98)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值