Cocos2d-x源码粗析1.base-nodes

Base-nodes:node继承自ref,是场景图形的基本元素。常见的继承自node的对象有Scene,Layer, Sprite, Menu, Label.
Node的主要特点:
1、可包含其他Node对象(addChild,getChildByTag, removeChild, etc)
2、可以实现定时回调(schedule,unschedule, etc)
3、可以执行动作(runAction,stopAction, etc)
继承Node:
1、重载init函数以初始化资源和安排回调
2、创建回调函数以实现程序随时间的推进
3、重载draw函数以渲染node
Node的属性:
- 位置:position (default: x=0, y=0)
- 缩放:scale (default: x=1, y=1)
- 旋转:rotation (in degrees, clockwise) (default: 0)
- 锚点:anchor point (default: x=0, y=0)
- 大小:contentSize (default: width=0, height=0)
- 可见:visible (default:true)
-CCNode.h
static const intINVALID_TAG = -1;

    enum {
       FLAGS_TRANSFORM_DIRTY = (1 << 0), //1
       FLAGS_CONTENT_SIZE_DIRTY = (1 << 1),  //2
       FLAGS_RENDER_AS_3D= (1 << 3),  //8
       FLAGS_DIRTY_MASK =(FLAGS_TRANSFORM_DIRTY |             FLAGS_CONTENT_SIZE_DIRTY),  //3
    };
  • 构造函数Node(void)有一长串的初始化,cocos采用二级构造机制,create()是真正有意义的构造函数,函数返回值为指向Node对象的指针,若构造成功,则调用autorelease()函数,即采用引用池进行管理,否则释放空间,并将指针指向空。

  • init函数直接返回true,看来需要重写

  • cleanup函数两步:停止所有动作,并且停止时间回调。与析构函数相似,涉及到脚本的需要特别处理,暂且略过。
  • getDescription顾名思义,得到Node的描述,字符串大小不得超过1024*100
  • 接下来就是一大堆get和set SkewX/Y 是与坐标轴夹角,
    LocalZOrder和GlobalZOrder分别为z轴的局部和全局坐标。
    Rotation/RotationSkew/Rotation3D无非就是传入参数不同,最终通过改变RotationQuat即可。
    Scale即缩放尺寸,可以整体也可以具体到某个坐标轴方向
    Position相关是位置向量,注意NormalizedPosition为规格化的位置向量
  • AnchorPoint锚点,意为将Node的某个点作为锚点,以便控制Node的位置和变换。 例如,把节点左下角作为锚点,值为(0,0)
    ; 把节点的中心作为锚点,值为(0.5,0.5) ; 把节点右下角作为锚点,值为(1,0) 。
  • getContentSize用于获得Node的初始大小,返回CGSize类型,而getBoundingBox获得节点当前大小,即如果经过缩放那么就是缩放后的大小。返回CGRect类型。
  • Tag和name用于标识一个Node,前者int相当于一个id,后者string
    getChildByTag/Name即通过这两个标识获得孩子节点。
    getChildrenCount顾名思义,获取孩子的数量。Vector
   void onEnter();//1,创建时调用  
   void onExitTransitionDidStart();//2,创建完node的时候调用,也就是1调用完之后调用 
   void onExit();//3,退出当前layer的时候调用,在这里都是做一些清除工作   
   void onEnterTransitionDidFinish();//4,在3完成之后,调用该成员方法
  • setEventDispatcher,需要涉及到EventDispatcher,EventListener,Event三者的关系

    Event相当于data,EventListener包含了data与fuction的一种映射关系,而EventDispatcher相当于一个Manager,管理着EventListener,决定着Event的调用顺序。
    Event中包含了type,target等信息;EventListener包含了ListenerID,相关联的Node,对应的callBack;EventDispatcher里含有各种map,vector来管理不同的Listener。具体的,http://www.tuicool.com/articles/fMb2ay7

  • Action相关包括setActionManager、runAction、stopAction等等,在之后介绍Action的时候再详细分析
  • 回调相关的定时器Scheduler负责执行设定好的回调,schedule函数有好多重载,可以设置selector,设置的selector参数与updateselector的区别是后者是每帧调用一次,可以定义优先级,而前者可以每帧执行一次,也可以设置自定义的时间间隔,即interval。schedule也可以用于定时调用自定义函数。Unschedule停止定时器
    cocos2dx的scheduler提供了定时事件或者回调。可以不使用NSTimer而是使用CCScheduler类
    CCNode知道如何设置间隔事件并且cocos2dScheduler比使用NSTimer有几个独特的优势。
    1)当CCNode不再显示或者从场景中移除之后,Scheduler调用将会停用。
    2)当Cocos2D暂停的时候,Scheduler调用也会停用,当Cocos2D恢复的时候,Scheduler也会重新设置设定并执行(rescheduled)。
    3)Scheduler提供毫秒的间隔时间。间隔时间在物理引擎中是非常有用的。
    4)运用Scheduler中的this->scheduleUpdate()调用能够确保你的更新函数在每帧需要渲染之前被调用。
    通常,CCScheduler比NSTimer节省很多时间并且能够使得开发者专注于游戏功能的实现。

  • pause和resume分别是暂停和恢复,pauseTarget和resumeTarget都是通过哈希表处理相关宏找到对应的哈希表项,并将paused开关设为true或者false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值