风言枫语  

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

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


 

 

posted on 2013-10-10 21:44  风言枫语  阅读(464)  评论(0编辑  收藏  举报