截图设置弹出暂停界面

在项目开发时,发现如果用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;

	}

}

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


 

 

你可能感兴趣的:(设置)