欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Cocos2d-x3.x Node源码学习

程序员文章站 2022-06-18 19:50:42
介绍节点是场景图的基础元素。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