cocos2dx 項目經驗之截圖設置彈出暫停界面

在項目開發時,發現如果用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;
	}
}
就這樣子就搞定了 加油、。。。。。



發佈了53 篇原創文章 · 獲贊 4 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章