Cocos2dx 最重要的基类节点类-Node

本文详细介绍了游戏开发中Node类的功能与应用。Node作为基类支持多种重要类如精灵类、场景类等,提供了丰富的属性与方法来管理游戏元素。文章深入探讨了节点创建、图形属性设置、事件回调等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

节点类是场景类、布景类、精灵类等多个重要类的基类,它负责管理游戏基本单位的基本数据(如位置坐标,缩放比例等。),而场景类,布景类,精灵类则是对其进行扩展。此类中给出的重要方法都可以供其他继承类使用。在学习其子类的时候最好对此类有所了解。

Node类继承与最基础的ref类

精灵类、场景类、布景类等重要的可视化元素类都继承Node类。


需要用到的数据类型

Point类 点 参数是两个浮点型的数据,代表X坐标和Y坐标。

Size类  大小 参数是两个浮点型数据,代表横向长度和纵向长度。

Vertex3F 三维向量 参数是3个浮点型数据,代表三维向量中3个坐标。


Node类的重要方法(也是其子类精灵类、场景类、布景类的重要方法)

关于节点创建和节点操作顺序的相关方法:

static Node* create(void)  创建一个节点对象(子类亦同样),采用工厂模式。

virtual std::string getDescription() 获取节点描述信息字符串。

virtual [void/float] set/getGlobalZOrder(float globalZOrder) 设置/获取全局ZOrder值。

virtual [void/float] set/getLocalZOrder(float LocalZOrder) 设置/获取节点本地ZOrder值。

virtual [void/int] set/getOrderOfArrival(int orderOfArrival) 设置/获取节点的到达顺序。

ZOrder是使用与对节点进行绘制时决定节点的前后遮盖顺序用的。

全局ZOrder优先级大于本地ZOrder。

也就是说 当全局ZOrder相同的时候,由本地ZOrder决定绘制顺序。


关于节点图形属性的方法:

virtual  [void/float]  [set/get]Scale[X/Y/Z](float scale) 获取/设置在X/Y/Z轴的缩放倍数。

virtual  [void/float]  [set/get]Scale(float scale) 获取设置整体绘制缩放倍。

virtual  void  setScale(float ScaleX,float ScaleY) 设置缩放倍数,两个参数代表X,Y轴上的缩放倍数。

virtual  [void/const Point&] [set/get]Position(const Point &position) 获取/设置节点的位置。

virtual [void/Vertex3F] [set/get]Position3D(const Vertex3F &position) 获取/设置在三维空间中的位置。

virtual [void/float]  [set/get]Position[X/Y/Z](float position) 获取/设置XYZ坐标点。

virtual  [void/float]  [set/get]Skew[X/Y](float skew) 获取/设置X/Y轴的倾斜数值。

virtual  [void/const Point &anchorPoint]  [set/get]AnchorPoint(const Point& anchorPoint) 获取/设置节点锚点。

关于节点的锚点

锚点 即使节点的原点(节点在自己的坐标系里坐标为(0,0)的点)  并不是指在总坐标系里的原点。

锚点 (0,0)  原点在节点最左下角。

锚点 (0,1)  原点在节点最左上角。

锚点 (1,1)  原点在节点最右上角。

锚点 (1,0)  原点在节点最右下角。

锚点 (0.5,0.5)  原点在节点中间。

virtual [void/const &size] [set/get]ContentSzie(const Size &contentSize) 设置/获取节点的尺寸,获取回来是矩形。

virtual [void/bool]  [set/get]VisibleSize(bool visible) 设置/获取节点是否可见,可见返回TRUE。

virtual  [void/float]  [set/get]Rotation(float ratation) 设置/获取节点的旋转角度值。

virtual  [void/Vertex3F]  [set/get]Rotation3D(const Vertex3F &ratation) 设置/获取三维空间中的旋转姿态。

virtual  [void/float]  [set/get]RotationSkew[X/Y](float rotation) 设置/获取在坐标轴上的旋转偏移值。

virtual  [void/bool]  [set/get]isIgnoreAnchorPointForPosition(bool ignore) 设置/获取在确定节点位置时是否忽略锚点的作用,true时忽略。


节点类Node采用组合模式,父子节点形成树形结构以表示“整体-部分”的结构层次。

关于节点操作的方法最能体验这模式的精髓,以下是有关节点操作的方法。

virtual void addChild(Node * child)  向节点中添加子节点,参数是节点指针。

virtual void addChild(Node * child,int localZOrder)  向节点中添加子节点,localZOrder参数表示子节点在节点中的本地ZOrder值。

virtual void addChild(Node * child,int localZOrder,int tag)  添加子节点,tag是子节点的标签。

virtual Node * getChildByTag(int tag) 通过子节点标签获取相应子节点。

virtual Vector<Node*> &getChildren()  获取子节点对象指针的容器。

virtual [void/Node*] [set/get]Parent(Node *parent) 设置/获取节点的父节点。

virutal void removeFromParent() 将这个节点从父节点里删除。

virtual void removeFromParentAndCleanup(bool cleanup)  将这个节点从父节点里删除,并且清除此节点上所有动作以及回调,false时不清除。

virtual void removeChild(Node* child,bool cleanup =  true)  从节点中删除子节点,并且清除子节点上所有动作以及回调。

virtual void removeChildByTag(int tag,bool cleanup=true) 通过子节点标签从此节点里删除子节点,并且清除子节点上所有动作以及回调。

virtual void removeAllChildren() 删除此节点上所有子节点。

virtual void removeAllChildrenWithCleanup(bool cleanup) 删除此节点上所有子节点,并且清除子节点上所有动作以及回调。

virtual void reorderChild(Node* child,int localZOrder) 重设子节点的本地ZOrder值。

virtual void sortAllChildren() 为子节点排序。

virtual int getTag() 获取此节点标签。

virtual void setTag(int tag)设置此节点标签。


与用户数据相关的方法,有了这些方法开发者就能把数据存入节点中,在需要的时候取出来。

virtual void* getUserDAata() 获取及诶单中预设的用户数据,返回值为用户数据指针。

virtual void setUserData(void *userData)设置节点中的用户数据。

virtual Ref* getUserObject()  获取节点中预设的用户对象,返回值为用户对象指针。

virtual void setUserObject(Ref *userObject)  设置节点中的用户对象。


事件回调方法

virtual void onEnter()  每次进入节点时被回调。(进入的意思是当节点进入游戏时)

virtual void  onEnterTransitionDidFinish()  节点进入完成后回调。

virtual void onExit()  节点退出时回调。(退出的意思指节点退出游戏时)

virtual void onExitTransitionDidStart()。 节点在退出时需要处理事情(如过渡动画等),则在退出前回调。

virtual void cleanup()  停止所有正在运行的操作和调度。


动作执行相关方法

virtual void setActionManager(ActionManager* actionManager) 设置动作管理器。

virtual ActionManager* getActionManager() 获取动作管理器指针。

Action* runAction(Action* action)  执行指定动作并返回动作指针。

void stopAllActions() 停止所有动作并删除动作。

void stopAction(Action* action) 删除并停止指定动作。

void stopActionByTag(int tag) 根据标签删除并停止指定动作。

Action * getActionByTag(int tag) 根据标签获取相应动作。


定时调度相关方法

virtual void setScheduler(Scheduler* scheduler) 设置定时调度器

virtual Scheduler* getScheduler() 获取定时调度器

bool isScheduled(SEL_SCHEDULE selector) 判断指定的选择器是否被调度,已被调度返回true。

void scheduleUpdate() 开始定时回调updata方法。

void scheduleUpdateWithPriority(int priority) 按照自定义优先级开始定时调度update方法 参数为自定义优先级。

void unscheduleUpdate() 停止定时回调update方法。

void schedule(SEL_SCHEDULE selector,float interval,unsigned int repeat,float delay) 定时回调制定的调度器,参数为:调度器,每次回调的时间间隔,回调次数,第一次回调前等待多长时间)。

void schedule(SEL_SCHEDULE selector,float interval)上面的简化版,参数为:调度器,每次回调的时间间隔。

void schedule(SEL_SCHEDULE selector,float delay)同上,参数为:调度器,第一次回调等待多长时间。

void schedule(SEL_SCHEDULE selector) 制定调度器每帧回调一次。

void unschedule(SEL_SCHEDULE selector)  停止回调制定调度器。

void unscheduleAllSelectors() 停止所有调度器。

void resume(void)  回复所有设置的被回调的调度器,同时恢复动作和事件监听。

void pause(void)  暂停所有设置的被回调的调度器,同时暂停动作和事件监听。

virtual void update(float delta) 用于开发人员重写后被定时或每帧回调update方法,delta参数为回调间时间差值。


坐标转换相关方法

Point converToNodeSpace(const Point& worldPoint) 将制定点的坐标由世界坐标系转换到本节点坐标系。

Point converToWorldSpace(const Point& nodePoint) 与上相反。

Point convertTouchToNodeSpace(Touch * touch)  将触控点坐标由世界坐标系转换为节点坐标系。


组件相关方法

virtual bool addComponent(Component * pComponent) 想节点中添加组件,添加成功返回true。

Component* getComponent(const std::string& pName) 通过组件名称获取组件。

virtual bool removeComponent(const std::string& pName)  通过名称移除组件。

virtual void removeAllComponents() 移除所有组件。


其余方法

virtual bool isRunning() 判断是否接受时间方法回调(onEnter,onExit等),简单的说就是判定节点是否在运行。

virtual Rect getBoundingBox() 获取节点的矩形边框并返回。

virtual void setEventDispatcher(EventDispatcher* dispacher) 设置事件分发器。

virtual EventDispatcher* getEventDispatcher() 获取事件分发器并获取指针。

virtual Scene* getScene() 获取所在场景


我们可以看到Node节点类几乎全部方法都是可以重写的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值