当前位置:编程学习 > C/C++ >>

截图设置弹出暂停界面

在项目开发时,发现如果用CCDirector::sharedDirector()->pause();之后精灵是做不了动作的,所以我寻求了另一种方法,
原理就是要弹出暂停界面是就用push(暂停场景),及顾名思义推出一个暂停界面,将游戏界面暂停压入栈中,当暂停界面响应后(或做动作完后)就可以pop,及拿出意思,推出栈,及之前的游戏界面会继续开始。
先新建一个暂停类PauseLayer
下面是部分实现 CCRenderTexture 是传过来的截图纹理 :
[cpp]  
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();  
}  
暂停之后恢复游戏使用
[cpp]  
CCDirector::sharedDirector()->popScene();  
然后就有个新的问题了,如果我的手机点击了桌面键(Home),正在进行的游戏需要变成暂停状态,该如何弄的呢,一开始我想到了用控制home的监听,但结果似乎起不来作用(它直接响应了回到手机主界面),所以只能在AppDelegate类里面修改
必须在这两个函数动手脚applicationDidEnterBackground(),applicationWillEnterForeground()
第一个表示的是退出游戏界面时(及桌面不显示游戏界面时),第二个表示的是回到游戏界面时
[cpp] 
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");  
    }  
  
}  
[cpp]  
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;  
    }  
}  
就这样子就搞定了 加油、。。。。。
 
 
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,