• 游戏暂停时的屏蔽触摸


    想让游戏暂停。仅仅要调用 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)
    {  
    }

    使用的时候很easy,游戏暂停时addChild,恢复时removeChild即可了,例如以下:

    游戏暂停时:

    CCDirector::sharedDirector()->pause();
    		//屏蔽一切触摸方应,此屏可以屏蔽一切触摸
    		noTouchLayer = NoTouchLayer::create();
    		this->addChild(noTouchLayer);  

    从暂停状态恢复:

    CCDirector::sharedDirector()->resume();
    this->removeChild(noTouchLayer, true);
    这个noTouchLayer可在GameLayer的头文件里声音为一个成员变量

  • 相关阅读:
    在ASP.Net中两种利用CSS实现多界面的方法
    c# 添加图片水印,可以指定水印位置+生成缩略图[付上帅图1,2,3,4]
    精力有限,本博客暂停维护,转到www.80back.com(个人的小站)
    设计一个silverlight的Button控件silverlight(银光)学习(1)
    asp.net(c#)上传图片生成缩略图
    DataGrid和存储过程结合的分页,只读取当前页数据
    c#实现google样式的分页
    asp.net MD5加密函数(c#)
    执行JS
    LoadRunner常见问题
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6831272.html
Copyright © 2020-2023  润新知