最近项目中用到了cocos2dx来开发一个基于陀螺仪的demo,忙了半个星期,一边学习一边开发,总算搞了出来。这里备份下开发中学习到的一些cocos2dx知识。
CONTENTS
上层Layer捕获所有的相应,防止底层接收
我们在做开发的时候,往往有N层layer,有的layer里面有menu,就会被误响应,这里备份一份简单的解决办法。
备注:
解决办法是参考网上的一些教程,根据menu的响应优先级为-128来屏蔽的。作者开发时比较赶项目,没有仔细的学习cocos2dx源码,后续需要仔细学习下cocos2dx的事件分发机制。
.h文件:
class ShowLogoLayer : public cocos2d::CCLayer { public: CREATE_FUNC(ShowLogoLayer); virtual bool init(); void finishMe(); virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); virtual void ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent); };
.cpp文件:
void ShowLogoLayer::finishMe() { CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); this->removeFromParent(); } bool ShowLogoLayer::init() { if ( !CCLayer::init() ) { return false; } //。。。 //。。。 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128-1, true); return true; } bool ShowLogoLayer::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent ) { finishMe(); return true; } void ShowLogoLayer::ccTouchMoved( CCTouch *pTouch, CCEvent *pEvent ) {//do nth } void ShowLogoLayer::ccTouchEnded( CCTouch *pTouch, CCEvent *pEvent ) {//do nth } void ShowLogoLayer::ccTouchCancelled( CCTouch *pTouch, CCEvent *pEvent ) {//do nth }
发表评论