什么是层,层在cocos2dx里是一个能处理触摸事件的CCNode,因为它负责用户交互,因此大部分游戏细节都在这个类中完成,所以我们经常派生这个图层来完成逻辑交互代码。当然如果你的图层不需要接受交互信息,那么你可以直接使用CCNode来做图层,效率更高
触摸处理设置:
默认情况下,CCLayer并不接收触摸事件,只有设置了接收触摸事件才能接受触摸
CCLayer::setTouchEnabled(true);
这样Layer就能响应触摸实现了,当触摸开始时
void CCLayer::ccTouchesBegan(CCSet* pTouches, CCEvent* pEvent);被调用
当触摸进行时
void CCLayer::ccTouchesMoved(CCSet* pTouches, CCEvent* pEvent);被调用
当触摸结束时
void CCLayer::ccTouchesEnded(CCSet* pTouches, CCEvent* pEvent);被调用
当触摸过程被打断,比如来电打断了一个触摸事件时
void CCLayer::ccTouchesCancelled(CCSet* pTouches, CCEvent* pEvent);被调用
默认触摸是支持多点触摸的,所以被调用上述虚函数,如果不需要支持多点,只要单点,那么应该设置触摸模式
virtual void setTouchMode(ccTouchesMode mode);
typedef enum {
kCCTouchesAllAtOnce,
kCCTouchesOneByOne,
} ccTouchesMode;
其中kCCTouchesAllAtOnce表示支持多点触摸,kCCTouchesOneByOne表示支持单点触摸,在调用了setTouchMode(kCCTouchesOneByOne)时,那么调用另外一套虚函数如下:
// default implements are used to call script callback if exist
当触摸开始时,虚函数virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);被调用
当手指移动时,虚函数virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);被调用
当手指离开时,虚函数virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);被调用
当来电打断触摸过程时,虚函数virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);被调用
CCLayer除了支持触摸输入之外,还能支持加速计输入,但是默认也是不支持的,需要增加代码来支持,调用
virtual void setAccelerometerEnabled(bool value);
可以设置加速计输入相应。
这时我们可以重载
virtual void didAccelerate(CCAcceleration* pAccelerationValue);
函数来处理加速计的输入。