coco2d-x 2.0学习系列(2):CCLayer
CCLayer相对于CCNode几乎没有什么新功能,但是可以接受触摸和加速输入。
图层不需要接收触摸和加速计输入,就尽量使用CCNode表示图层,CCLayer因为能够接收触摸和加速计输入会增加不必要的开销。移动、缩放、旋转整个图层,图层上的所有节点也会跟着一起移动、缩放、旋转。
类结构:
常用函数:
virtual bool isTouchEnabled ()//CCLayer默认情况是不接收触摸输入的,需要显示地设置isTouchEnabled为YES
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);
}