zoukankan      html  css  js  c++  java
  • 截图设置弹出暂停界面

    在项目开发时,发现如果用CCDirector::sharedDirector()->pause();之后精灵是做不了动作的,所以我寻求了另一种方法,

    原理就是要弹出暂停界面是就用push(暂停场景),及顾名思义推出一个暂停界面,将游戏界面暂停压入栈中,当暂停界面响应后(或做动作完后)就可以pop,及拿出意思,推出栈,及之前的游戏界面会继续开始。

    先新建一个暂停类PauseLayer

    下面是部分实现 CCRenderTexture 是传过来的截图纹理 :

    CCScene* PauseLayer::scene( CCRenderTexture *sqr, bool isFlip )
    {
    	CCScene *scene = CCScene::create();
    	CCSize size = CCDirector::sharedDirector()->getWinSize();
    	CCSprite *_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture());
    	_spr->setPosition(ccp(size.width / 2, size.height / 2));
    	_spr->setFlipY(isFlip);  //是否翻转
    	_spr->setColor(ccGRAY);  //颜色(变灰暗)
    	scene->addChild(_spr);
    	PauseLayer* layer = PauseLayer::create();
    	scene->addChild(layer);
    
    	return scene;
    	CCDirector::sharedDirector()->pause();
    }

    暂停之后恢复游戏使用

    	CCDirector::sharedDirector()->popScene();

    然后就有个新的问题了,如果我的手机点击了桌面键(Home),正在进行的游戏需要变成暂停状态,该如何弄的呢,一开始我想到了用控制home的监听,但结果似乎起不来作用(它直接响应了回到手机主界面),所以只能在AppDelegate类里面修改

    必须在这两个函数动手脚applicationDidEnterBackground(),applicationWillEnterForeground()

    第一个表示的是退出游戏界面时(及桌面不显示游戏界面时),第二个表示的是回到游戏界面时

    void AppDelegate::applicationDidEnterBackground()
    {
    	CCDirector::sharedDirector()->stopAnimation();
    	SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
    	CCSize size = CCDirector::sharedDirector()->getWinSize();//在游戏界面类里的scene定义一个tag为30
    
    	CCRenderTexture* renderTexture = CCRenderTexture::create(size.width, size.height);
    	renderTexture->retain();
    	CCScene *s = CCDirector::sharedDirector()->getRunningScene();
    
    	CCLog("%d", s->getTag());
    
    	if (s->getTag() == 30)
    	{
    		renderTexture->begin();
    		s->visit();
    		renderTexture->end();
    		CCScene* pause = PauseLayer::scene(renderTexture, true);
    		Game::pauseflag=true;
    		pause->setTag(30+1);
    		CCDirector::sharedDirector()->pushScene(pause);
    	}else
    	{
    		CCLog("do nothing");
    	}
    
    }
    void AppDelegate::applicationWillEnterForeground()
    {
    	CCDirector::sharedDirector()->startAnimation(); 
    	int tag = CCDirector::sharedDirector()->getRunningScene()->getTag();
    
    
    	switch (tag)
    	{
    	case 31:
    
                   //回到来后判断是否为暂停界面 是的话不恢复声音
    		CCLog("Tag = 31 do nothing");
    		break;
    	default:
    		CCLog("Tag = other do something");
    		SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
    		break;
    	}
    }

    就这样子就搞定了 加油、。。。。。


  • 相关阅读:
    centos 查看版本(转)
    防火墙内设置FileZilla Server注意事项
    mycat读写分离与主从切换
    用mycat做读写分离:基于 MySQL主从复制
    mysql处理海量数据时的一些优化查询速度方法
    CentOS下LVS DR模式负载均衡配置详解
    Linux清除arp缓存
    扫描局域网内所有主机和MAC地址的Shell脚本
    Windows+Python 3.6环境下安装PyQt4
    Python 爬虫-豆瓣读书
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3362231.html
Copyright © 2011-2022 走看看