游戏暂停时的屏蔽触摸

想让游戏暂停,只要调用 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的头文件中声音为一个成员变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天马流星2719

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值