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