标签:style blog http color 使用 os io ar
原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38733415
上一讲我们简单的介绍了CCScene,这一讲我们继续来看另一个核心组件CCLayer,他和CCScene有些类似,都是用来收纳其他节点,但是按照层次来说的话,CCLayer应该包含在CCScene之中。老规矩,我们从代码看起。
class CC_DLL CCLayer : public CCNode, public CCTouchDelegate, public CCAccelerometerDelegate, public CCKeypadDelegate
{
public:
CCLayer();
virtual ~CCLayer();
virtual bool init();
static CCLayer *create(void);
virtual void onEnter();
virtual void onExit();
// 调用onEnter方法后调用此方法
virtual void onEnterTransitionDidFinish();
// 单点触摸事件响应函数,分别是按下、移动、抬起、取消(比如突然来电话了)
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);
// 多点触摸事件响应函数
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);
// 重力传感器响应函数
virtual void didAccelerate(CCAcceleration* pAccelerationValue);
// 注册/取消注册重力传感器脚本处理
void registerScriptAccelerateHandler(int nHandler);
void unregisterScriptAccelerateHandler(void);
// 注册触摸事件分发
virtual void registerWithTouchDispatcher(void);
// 注册/取消注册触摸脚本处理
virtual void registerScriptTouchHandler(int nHandler, bool bIsMultiTouches = false, int nPriority = INT_MIN, bool bSwallowsTouches = false);
virtual void unregisterScriptTouchHandler(void);
// 获取/设置触摸事件监听是否可用
virtual bool isTouchEnabled();
virtual void setTouchEnabled(bool value);
// 设置/获取触摸模式
virtual void setTouchMode(ccTouchesMode mode);
virtual int getTouchMode();
// 设置/获取触摸时间优先级,默认为0
virtual void setTouchPriority(int priority);
virtual int getTouchPriority();
// 获取/设置重力传感器事件监听是否可用
virtual bool isAccelerometerEnabled();
virtual void setAccelerometerEnabled(bool value);
// 设置加速器灵敏度
virtual void setAccelerometerInterval(double interval);
// 获取/设置键盘事件监听是否可用
virtual bool isKeypadEnabled();
virtual void setKeypadEnabled(bool value);
// 注册/取消注册键盘脚本处理
void registerScriptKeypadHandler(int nHandler);
void unregisterScriptKeypadHandler(void);
// 点击返回按钮响应函数
virtual void keyBackClicked(void);
// 点击菜单按钮响应函数
virtual void keyMenuClicked(void);
// 获取脚本处理实体
inline CCTouchScriptHandlerEntry* getScriptTouchHandlerEntry() { return m_pScriptTouchHandlerEntry; };
inline CCScriptHandlerEntry* getScriptKeypadHandlerEntry() { return m_pScriptKeypadHandlerEntry; };
inline CCScriptHandlerEntry* getScriptAccelerateHandlerEntry() { return m_pScriptAccelerateHandlerEntry; };
protected:
bool m_bTouchEnabled;
bool m_bAccelerometerEnabled;
bool m_bKeypadEnabled;
private:
CCTouchScriptHandlerEntry* m_pScriptTouchHandlerEntry;
CCScriptHandlerEntry* m_pScriptKeypadHandlerEntry;
CCScriptHandlerEntry* m_pScriptAccelerateHandlerEntry;
int m_nTouchPriority;
ccTouchesMode m_eTouchMode;
int excuteScriptTouchHandler(int nEventType, CCTouch *pTouch);
int excuteScriptTouchHandler(int nEventType, CCSet *pTouches);
};从CCLayer的源码可以看出,CCLayer其实就是图层的概念,本身几乎没有什么功能,对比CCNode,CCLayer可用于接收触摸、加速计和按键输入。其实Cocos2dx对图层要求没有那么严格,如果你的图层不需要接收触摸、加速计和按键输入,完全可以使用CCNode,这样还可以节省因为接收输入造成的不必要开销。
// 1)在图层init阶段将属性设置为可触摸
setTouchEnabled(true);
//2)重载virtual void registerWithTouchDispatcher(void);
void CCLayer::registerWithTouchDispatcher()
{
CCTouchDispatcher::sharedDispatcher()->addTargetedDelegate(this,0,true);
}
//3)重载触摸响应函数
virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
//4)通过pTouch得到用户的触摸点
CCPoint point = pTouch->getLocation();
//5)处理多点触摸仅是重载的函数不同
// 1)在图层init阶段将属性设置为开 setAccelerometerEnabled(true); //2)重载virtual void didAccelerate(CCAcceleration* pAccelerationValue); //3)通过pAccelerationValue得到重力传感器的数值 pAccelerationValue.x; pAccelerationValue.y; pAccelerationValue.z;
// 1)在图层init阶段将属性设置为开
setKeypadEnabled(true);
//2)重载按键响应函数
virtual void keyBackClicked(void);
virtual void keyMenuClicked(void);有时候,我们想给整个图层设置一种背景颜色,那么就需要用到CCLayerColor了,CCLayerColor是CCLayer的子类。
ccColor4B color = ccc4(255, 0, 0, 255); CCLayerColor *layerColor = CCLayerColor::create(color); addChild(layerColor);
CCLayerGradient是CCLayerColor的子类,用于设置渐变色图层。创建方法和CCLayerColor创建相似。
ccColor4B red = ccc4(255, 0, 0, 255); ccColor4B blue = ccc4(0, 0, 255, 255); CCLayerColor *layerColor = CCLayerColor::create(red, blue); addChild(layerColor);
Cocos2d-x学习笔记(五)CCLayer分析及输入事件处理(触摸、重力传感器、按键),布布扣,bubuko.com
Cocos2d-x学习笔记(五)CCLayer分析及输入事件处理(触摸、重力传感器、按键)
标签:style blog http color 使用 os io ar
原文地址:http://blog.csdn.net/sfh366958228/article/details/38733415