首页 > 代码库 > 游戏暂停时的屏蔽触摸
游戏暂停时的屏蔽触摸
想让游戏暂停,只要调用 CCDirector::sharedDirector()->pause(); 就行了,反止重新游戏就是 CCDirector::sharedDirector()->resume();
但这有一个问题就是游戏层依然能接受触摸反应,我们想按下pause键游戏暂停,但游戏内容不再接受触摸,该怎么办呢?
pause键一般是CCMenu, 它的触摸优先级为-128 数值越小越优先。所以我们想到的是游戏暂停的时候在游戏GameLayer层上加一个看不见的层,估且叫NoTouchLayer吧,让它屏蔽一切触摸。此类实现如下:
#pragma once #include "cocos2d.h" class NoTouchLayer : public cocos2d::CCLayer { public: virtual bool init(); CREATE_FUNC(NoTouchLayer); virtual void registerWithTouchDispatcher(); 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); };
#include "NoTouchLayer.h" USING_NS_CC; bool NoTouchLayer::init() { if (!CCLayer::init()) { return false; } setTouchEnabled(true); return true; } void NoTouchLayer::registerWithTouchDispatcher() { //优先级低于-128(CCMenu),同时高于其他层(0),true表示吞噬触摸 这样就屏敝了其他层的触摸 CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -127, true); CCLayer::registerWithTouchDispatcher(); } bool NoTouchLayer::ccTouchBegan (CCTouch *pTouch, CCEvent *pEvent) { return true; //返回true接受触摸 } void NoTouchLayer::ccTouchMoved (CCTouch *pTouch, CCEvent *pEvent) { } void NoTouchLayer::ccTouchEnded (CCTouch *pTouch, CCEvent *pEvent) { }
使用的时候非常简单,游戏暂停时addChild,恢复时removeChild就行了,如下:
游戏暂停时:
CCDirector::sharedDirector()->pause(); //屏蔽一切触摸方应,此屏能够屏蔽一切触摸 noTouchLayer = NoTouchLayer::create(); this->addChild(noTouchLayer);
从暂停状态恢复:
CCDirector::sharedDirector()->resume(); this->removeChild(noTouchLayer, true);这个noTouchLayer可在GameLayer的头文件中声音为一个成员变量
游戏暂停时的屏蔽触摸
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。