当前位置: 移动技术网 > 科技>操作系统>windows > Cocos2d-x3.x Node源码学习

Cocos2d-x3.x Node源码学习

2020年08月10日  | 移动技术网科技  | 我要评论
介绍节点是场景图的基础元素。Node类继承自Ref类。场景图的元素必须是Node对象或它的子类。最常见的Node对象是:Scene,Layer,Sprite,Menu,Label。节点的主要特征是:它们可以包含其他节点的对象(addChild,getChildByTag,removeChild等)他们可以安排定期的回调(schedule,unschedule,等)他们可以执行动作(runAction,stopAction,等)函数解读:public functions //

介绍

节点是场景图的基础元素。
Node类继承自Ref类。

场景图的元素必须是Node对象或它的子类。最常见的Node对象是:Scene,Layer,Sprite,Menu,Label。

节点的主要特征是:

  • 它们可以包含其他节点的对象(addChild,getChildByTag,removeChild等)
  • 他们可以安排定期的回调(schedule,unschedule,等)
  • 他们可以执行动作(runAction,stopAction,等)

函数解读:

  • public functions
    //返回节点是否活动。如果是running,它将会允许事件回调就像onEnter()、onExit()、update()
    virtual bool isRunning() const;
    
    //为lua导出的接口。可以延迟执行回调
    void scheduleUpdateWithPriorityLua(int handler,int priority);
    
    //暂停所有活动着的动作和调度器。被 ProtectedNode 和 TransitionScene 重载
    virtual void cleanup();
    
    //绘制节点
    virtual void draw(Renderer* renderer,const Mat4 &transform,bool transformUpdated);
    
    //访问节点的孩子,并且循环递归的绘制它们。
    virtual void visit(Renderer* renderer,const Mat4 &parentTransform,bool parentTransformUpdated);
    
    //返回包含Node节点的Scene,如果这个节点不属于任何场景,返回nullptr。
    //这个函数循环调用parent->getScene(),直到父类是一个Scene对象。被Scene重载。
    virtual Scene* getScene();
    
    //返回一个AABB(轴向包围盒)在它的父坐标系中
    virtual Rect getBoundingBox() const;
    
    //注册监听事件
    virtual void setEventDispatcher(EventDispatcher* dispatcher);
    
    //获取事件监听
    virtual EventDispatcher* getEventDispatcher() const;
    
    //获取不透明度
    virtual GLubyte getOpacity() const;
    
    //设置不透明度
    virtual void setOpacity(GLubyte opacity);
    
    //获取节点显示在屏幕上的不透明度
    virtual GLubyte getDisplayedOpacity() const
    
    //设置节点显示在屏幕上的不透明度
    virtual void updateDisplayOpacity(GLubyte parentOpacity)
    
    //设置子节点不透明度是否跟随变化 true:跟随变化 false:不跟随变化
    virtual void setCascadeOpacityEnabled(bool cascadeOpacityEnabled)
    
    //获取子节点不透明度是否跟随变化
    virtual bool isCascadeOpacityEnabled () const
  • Setters & Getters for Graphic Properties functions 图形属性的设置器和获取器函
    //LocalZOrder是用于对节点相对于其同级进行排序的“关键字”。
    //两个节点具有相同的LocalZOrder,则首先添加到子级数组中的节点将位于数组中另一个节点的前面。
    vitrual void setLocalZOrder(int localZOrder)
    
    //获取localZOrder的值
    virtual int getLocalZOrder () const
    
    //设置节点渲染器的顺序,globalZorder越小的节点最先渲染。
    //相同globalZorder值的节点,使用场景图顺序来渲染节点
    virtual void setGlobalZOrder(float globalZorder)
    
    //X轴/Y轴缩放 当参数为负时,节点翻转并改变锚点。
    virtual void getScaleX(float scaleX)
    virtual float getScaleX() const
    virtual void getScaleY(float scaleY)
    virtual float getScaleY() const
    
    //设置/获取节点在父节点上的位置。与父节点的锚点无关,参考点始终是父节点左下角点(creator中跟父节点锚点有关)
    virtual void setPosition(const Vec2& position)
    virtual const Vec2& getPosition() const
    
    // 设置/获取节点 X/Y 坐标
    virtual void setPositionX (float x)
    virtual float getPositionX (void) const
    virtual void setPositionY (float y)
    virtual float getPositionY (void) const
    
    // 倾斜角度 负数:节点顺时针选择,正数:节点逆时针旋转。
    virtual void setSkewX (float skewX)
    virtual float getSkewX () const
    virtual void setSkewY (float skewY)
    virtual float getSkewY () const
    
    //设置/获取锚点
    virtual void setAnchorPoint(const Vec2& anchorPoint)
    virtual const Vec2& getAnchorPoint() const
    
    //返回绝对像素的锚点。
    virtual const Vec2& getAnchorPointInPoints()
    
    //设置/获取 未转换节点的尺寸 
    virtual void setContentSize(const Size& contentSize) //被EditBox、LayerColor、Scale9Sprite及ScrollView重载
    virtual const Size& getContentSize() const
    
    //设置/获取节点是否可见。true-可见 false-隐藏 
    virtual void setVisible(bool visible) //Sprite、EditBox、VideoPlayer重载。
    virtual bool isVisible() const
    
    // 设置/获取节点的旋转角度 rotation 负数顺时针旋转,正数逆时针旋转
    virtual void setRotation(float rotation) // 被Sprite、ParticleSystem、PhysicsSprite重载。
    virtual float getRotation() const
  • Children and Parent functions
    //添加子节点 localZOrder:层级(默认为0) tag:标签 name:名字
    virtual void addChild(Node *child)
    virtual void addChild(Node *child, int localZOrder)
    virtual void addChild(Node *child, int localZOrder, int tag)
    virtual void addChild(Node *child, int localZOrder, const std::string &name)
    
    //获取子节点
    virtual Node* getChildByTag(int Tag) // 从容器中通过Tag获得节点
    //virtual Vector<Node*>& getChildren() //返回子节点数组 ScrollView、ListView、PageView重载
    virtual ssize_t getChildrenCount() const //返回子节点总数
    getChildByName (const std::string &name) const //从容器中通过name获得节点
    
    //设置/获取 父节点
    virtual void setParent (Node *parent)
    virtual Node* getParent()
    
    // 移除节点
    virtual void removeFromParent() //从父节点中删除自己
    virtual void removeFromParentAndCleanup(bool cleanup) //删除自己 cleanup true:删除自身所有动作和回调函数。false不删除
    virtual void removeChild(Node* child, bool cleanup = true) //移除指定的子节点
    virtual void removeChildByTag(int tag, bool cleanup = true) //通过tag移除指定的子节点
    virtual void removeAllChildren() //移除所有子节点,同时清除所有动作
    virtual void removeAllChildrenWithCleanup(bool cleanup) //移除所有子节点,cleanup决定是否清除所有活动动作
    
    //对指定的子节点排序 设定一个新的localZOrder值
    virtual void reorderChild(Node* child,int localZOrder)
    
    //在绘制之前对子数组进行排序,而不是在每次添加或重新排序子时对其进行排序。
    //除非需要在同一帧中删除添加的子项,否则请勿手动调用此选项。
    virtual void sortAllChildren()
  • Tag & User data
    //设置/获取tag
    virtual void setTag (int tag)
    virtual int getTag() const 
    
    //自定义用户数据指针。设置一个自定义用户数据指针。随意设置UserData指针为一个数据块、结构体、或者一个对象等等。但是要注意释放内存。
    virtual void setUserData(void* userData) 
    virtual void* getUserData()
    
     //设置/返回一个用户分配对象 
    virtual Ref* getUserObject() 
    virtual void setUserObject(Ref* userObject)
  • GLProgram
    GLProgram* getGLProgram() // 返回当前用于这个节点的着色器 GLProgram(shader)
    GLProgram* getShaderProgram () const
    virtual void setGLProgram (GLProgram *glprogram)
    void setShaderProgram (GLProgram *glprogram)
    GLProgramState* getGLProgramState () const
    virtual void setGLProgramState (GLProgramState *glProgramState)
  • Event Callbacks
    //每次当Node进入stage时被调用。重写需调用父类onEnter()函数
    virtual void onEnter() 
    
    //每次当Node进入stage后调用的回调事件函数。重写需调用父类函数
    virtual void onEnterTransitionDidFinish() 
    
    //每次当Node离开stage时调用。重写需调用父类onExit()函数
    virtual void onExit() 
    
    //每次当Node离开stage后调用。重写需调用父类函数
    //ProtectedNode、ClippingNode重载。
    virtual void onExitransitionDidStart() 
  • Actions
    //设置所有动作使用的ActionManager对象,一旦设置新的,之前的动作将被删除。
    virtual void setActionManager(ActionManger* actionManager) 
    
    //获取ActionManager对象
    virtual ActionManager* getActionManager()
    virtual const ActionManager* getActionManager() const
    
    //执行一个动作,并返回被执行的动作。这个节点会变成动作的目标。
    Action* runAction(Action* action)
    
    //停止并删除所有活动的动作。
    void stopAllActions()
    
    //停止并且删除指定的动作
    void stopAction(Action* action)
    
    //停止并删除指定Tag值的动作。
    void stopActionByTag(int tag)
    
    //获取指定Tag的动作。
    Action* getActionByTag(int tag)
    
    //返回活动着的动作加上正在调度运行的动作的总数。
    ssize_t getNumberOfRunningActions() const
  • Scheduler and Timer
    //设置一个调度器对象用来调度所有的update和定时器。之前的调度器将被删除。
    virtual void setScheduler(Scheduler* scheduler)
    
    //获取调度器
    virtual Scheduler* getScheduler()
    virtual const Scheduler* getScheduler () const
    
    //调度update方法,它将使用顺序数字0,这个方法在每一帧都被调用一次,拥有低顺序值的调度方法将会在高顺序值的方法之前调用。
    void scheduleUpdate(void)
    
    //调度这个update方法,伴随着一个自定义优先级。这个调度器将会在每一帧被调用。
    void scheduleUpdateWithPriority(int priority)
    
    //取消调用update方法
    void unscheduleUpdate(void)
    
    //调度一个自定义的选择器,如果选择器已经被调度了,那么内部的参数将会被更新而不再次调度一遍。
    //参数依次为:将被调用的方法、时间间隔、执行次数、第一个时间间隔开始执行前的等待时间。  
    void scheduler(SEL_SCHEDULE selector)
    void schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)
    void scheduler(SEL_SCHEDULE selector, float interval)
    
    //延迟delay秒后执行 只执行一次
    void scheduleOnce (SEL_SCHEDULE selector, float delay)
    
    //参数:拉姆达函数、函数的key 只执行一次
    void scheduleOnce(const std::function< void(float)> &callback, float delay, const std::string &key)
    
    //不调度一个自定义的选择器。
    void unschedule(SEL_SCHEDULE selector)

    //不调度所有调度过的选择器,自定义选择器和update选择器。
    void unscheduleAllSelectors(void)
    
    //恢复所有的调度过得选择器,动作和事件监听,这个方法在onEnter方法内部调用。
    void resume(void)
    
    //暂停所有调度过的选择器,动作和事件监听,这个方法在onExit方法内部调用。
    void pause(void)
    CC_DEPRECATED_ATTRIBUTE void resumeSchedulerAndActions(void)
    CC_DEPRECATED_ATTRIBUTE void pauseSchedulerAndActions(void)
    virtual void update(float delta)
  • Coordinate Converters
    //世界坐标转换成节点空间坐标系
    Vec2 convertToNodeSpace(const Vec2& worldPoint) const //以参照物左下角为远点
    Vec2 convertToNodeSpaceAR(const Vec2& worldPoint) const // 以参照物的锚点为原点 
    
    //节点坐标转成世界空间坐标系。
    Vec2 convertToWorldSpace(const Vec2 &nodePoint) const//以参照物左下角为远点
    Vec2 convertToWorldSpaceAR(const Vec2& nodePoint) const// 以参照物的锚点为原点
    
    //将触摸点转换成节点坐标
    Vec2 convertTouchToNodeSpace(Touch* touch) const
    Vec2 converTouchToNodeSpaceAR(Touch* touch) const //相对与锚点

本文地址:https://blog.csdn.net/qiuwen_521/article/details/107885407

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网