好记性不如铅笔头

C && C++, cocos2dx, 编程

cocos2dx学习笔记:吞噬事件相应

最近项目中用到了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
}

 

发表评论

16 + 20 =

此站点使用 Akismet 来减少垃圾评论。了解我们如何处理您的评论数据