Node与Node层级架构
树形结构
Node中的重要操作
- 创建节点 Node* childNode=Node::create() (create静态函数)。
- 增加新的子节点。node->addChild(childNode,0,123)。
virtual void addChild(Node * child)
virtual void addChild(Node * child,int localZOrder)
virtual void addChild(Node * child,int localZOrder,int tag )
- 查找子节点。node->getChildByTag(123)。
- node->removeChildByTag(123,true)删除子节点,并停止所有该节点上的一切动作。
- node->removeChild(childNode) 通过Node指针删除节点。
- node->removeAllChildrenWithCleanup(true) 删除所有子节点,并停止这些子节点上的一切动作。
- node->removeFromParentAndCleanup(true) 从父Node中删除节点,并停止所有节点上的一切动作。
Node中重要的属性
position与anchorPoint(锚点)
锚点的取值范围一般是0~1
锚点是
position点x坐标到矩形左边线的距离,与矩形x轴方向上的边长的比例;
position点y坐标到矩形下边线的距离,与矩形y轴方向上的边长的比例。
游戏循环与调度
每一个游戏程序都有一个循环在不断运行,它是由导演对象来管理和维护。如果需要场景中的精灵运动起来,我们可以在游戏循环中使用定时器(Scheduler)对精灵等对象的运行进行调度。因为Node类封装了Scheduler类,所以我们也可以直接使用Node中调用函数。
Node中调用函数主要有:
- void scheduleUpdate(void) 。每个Node对象只要调用该函数,那么这个Node对象就会定时地每帧回调用一次自己的update(float dt)函数。(dt代表时间间隔)。
- void schedule(SEL_SCHEDULE selector,float interval)。与scheduleUpdate函数功能一样,不同的是我们可以指定回调函数(通过selector指定),也可以更改需要指定回调时间间隔。
- void unscheduleUpdate(void )。停止update(float dt)函数调度。
- void unschedule(SEL_SCHEDULE selector)。也可以指定具体函数停止调度。
- void unscheduleAllSelectors(void)。可以停止所有调度。