Cocos2d-x 层类CCLayer
层的作用主要有两个:
一是容纳精灵等节点,使它们被包含进场景(层的父节点肯定是场景,因为导演类只能和场景实例相关联);
二是接收用户的输入操作,这里cocos2d
打了一个标签,分别实现iphone
和mac
的处理逻辑,因为二者的输入方式有差异,iphone
支持重力感应,而mac
支持鼠标和键盘。
参数
BOOL isTouchEnabled//是否支持触摸响应。
BOOL isAccelerometerEnabled //是否支持重力感应。
方法
- (id)init
重构的初始化方法,和
CCScene
一样,设置了锚点和宽高(和屏幕一样),此外还将isTouchEnabled
和isAccelerometerEnabled
置为NO。
- (void)registerWithTouchDispatcher
将自己注册进
CCTouchDispatch
,这是管理触摸信息的类,在该类注册的对象才有被分发到触摸信息的可能
- (BOOL)isAccelerometerEnabled
返回对象的
isAccelerometerEnabled
,即检测该层是否支持重力感应。
- (void)setAccelerometerEnabled:(BOOL)enabled
设置对象的的
isAccelerometerEnabled
,使其允许或拒绝对重力的感应。
- (BOOL)isTouchEnabled
返回对象的
isTouchEnabled
,即检测该层是否支持触摸响应。
- (void)setTouchEnabled:(BOOL)enabled
设置对象的的
isTouchEnabled
,使其允许或拒绝对触摸的响应。如果允许,会向CCTouchDispatch
注册,如果不允许则注销。
- (void)onEnter
在
CCNode
的基础上添加了一个判断,如果支持触摸则执行registerWithTouchDispatcher
。
- (void)onEnterTransitionDidFinish
只在父类基础上增加了一个功能,就是当对象支持重力感应的时候,设置自己为
UIAccelerometer
单例的代理,此时当终端发生晃动时,该对象会被回调,但回调函数- (void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
并未声明,需要开发者自行扩展。
- (void)onExit
就是在父类的基础上,增加了对
CCTouchDispatcher
的注销和取消对UIAccelerometer
的代理(如果有触摸和重力感应的话)