cocos2dx中的层CCLayer

什么是层,层在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);

函数来处理加速计的输入。









posted on 2014-03-28 12:41  三少爷的剑123  阅读(236)  评论(0编辑  收藏  举报

导航