coco2d-x 2.0学习系列(2):CCLayer

coco2d-x 2.0学习系列(二):CCLayer

CCLayer相对于CCNode几乎没有什么新功能,但是可以接受触摸和加速输入。

图层不需要接收触摸和加速计输入,就尽量使用CCNode表示图层,CCLayer因为能够接收触摸和加速计输入会增加不必要的开销。移动、缩放、旋转整个图层,图层上的所有节点也会跟着一起移动、缩放、旋转。

类结构:

coco2d-x 2.0学习系列(2):CCLayer

常用函数:

virtual bool isTouchEnabled ()//CCLayer默认情况是不接收触摸输入的,需要显示地设置isTouchEnabledYES

virtual bool isAccelerometerEnabled ()//设置加速输入

CCLayer的触摸有两种类型。

1) 单点触摸 

virtual void onEnter();//
 virtual void onExit();//

virtual void ccTouchesBegan (CCSet *pTouches, CCEvent *pEvent)//单指接触到屏幕时

virtual void ccTouchesMoved (CCSet *pTouches, CCEvent *pEvent)//当手指在屏幕上移动时

virtual void ccTouchesEnded (CCSet *pTouches, CCEvent *pEvent)//手指离开屏幕时

virtual void ccTouchesCancelled (CCSet *pTouches, CCEvent *pEvent)//当触摸取消时

a) onEnter();接口。在此接口中,需要调用父类的该接口,并且最重要的,要为当前对象注册一个触摸委托(即:代理)。参考如下代码:
 CCLayer::onEnter();
 CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this, 0, true);
b) onExit();接口。在此接口中,需要将在onEnter()中注册的当前对象的触摸委托给移除掉。然后调用父类的onExit();。参考代码如下:
 CCTouchDispatcher::sharedDispatcher()->removeDelegate(this);
 CCLayer::onExit();

 

2) 多点触摸

virtual void ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);
 virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);
 virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);

  CCSet*对象。它存储着所有的触摸信息。

Tip:

单点触摸时候一定得重写:

virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);

并且返回true

 void registerWithTouchDispatcher();//默认为多点触摸 单点触摸的时候重写此方法

void HelloWorld::registerWithTouchDispatcher(){

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);

}