多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > [置頂] Cocos2d-x游戲暫停、繼續游戲、重新開始界面的實現---之游戲開發《趙云要格斗》(10)

[置頂] Cocos2d-x游戲暫停、繼續游戲、重新開始界面的實現---之游戲開發《趙云要格斗》(10)

來源:程序員人生   發布時間:2015-02-13 08:56:07 閱讀次數:8910次
         這里是Evankaka的博客,歡迎大家前來討論與交換~~~~~~

           轉載請注明出處http://blog.csdn.net/evankaka/article/details/42936117

       本文要實現游戲中的暫停、重新開始。將當前界面截圖,然后用這張圖去構造1個層(以這張圖為背景),然后加個按鈕,主界面點暫停時,pushScene(),然后轉到游戲暫停界面,當在游戲暫停界面點繼續游戲popScne()。在cocos2dx中推動(pushScene())暫停場景,之前運行的場景將會自動暫停,然后我們可以在暫停場景中操作,當我們不再需要暫停場景時,可以popScene()將暫停場景彈出。重新開始游戲直接replaceScene().

cocos2d-x版本:2.2.5

工程環境:windows7+VS2010

打開方式:將工程放在cocos2d-x安裝目錄下的project文件夾下用VS打開

本文效果:


1、游戲暫停界面初步實現

 思路:將當前界面截圖,然后用這張圖去構造1個層(以這張圖為背景),然后加個按鈕,主界面點暫停時,pushScene(),然后轉到游戲暫停界面,當在游戲暫停界面點繼續游戲時popScne(),

首先看看自定義的游戲暫停的層

頭文件 Gamepause.h

#ifndef __Gamepause__H__ #define __Gamepause__H__ #include "cocos2d.h" USING_NS_CC; class Gamepause : public cocos2d::CCLayer { public: virtual bool init(); static cocos2d::CCScene* scene(CCRenderTexture* sqr); CREATE_FUNC(Gamepause); //繼續游戲 void menuContinueCallback(CCObject* pSender); private: }; #endif // __Gamepause_H__
然后是實現文件
#include "Gamepause.h" //傳入1個CCrenderTexture //相當于1個正在運行的游戲的截圖作為這個暫停對話框的背景 //這樣就看起來像是對話框在游戲界面之上,1般游戲當中都是這模樣寫的。 CCScene* Gamepause::scene(CCRenderTexture* sqr) { CCScene *scene = CCScene::create(); Gamepause *layer = Gamepause::create(); scene->addChild(layer,1); //增加部份:使用Game界面中截圖的sqr紋理圖片創建Sprite //并將Sprite添加到GamePause場景層中 //得到窗口的大小 CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCSprite *back_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture()); back_spr->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); //放置位置,這個相對中心位置。 back_spr->setFlipY(true); //翻轉,由于UI坐標和OpenGL坐標不同 back_spr->setColor(cocos2d::ccGRAY); //圖片色彩變灰色 scene->addChild(back_spr); return scene; } bool Gamepause::init() { if ( !CCLayer::init() ) { return false; } //得到窗口的大小 CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); //原點坐標 CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); //繼續游戲按鈕 CCMenuItemImage *pContinueItem = CCMenuItemImage::create( "pause_continue.png", "pause_continue.png", this, menu_selector(Gamepause::menuContinueCallback)); pContinueItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2+30)); CCMenu* pMenu = CCMenu::create(pContinueItem,NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 2); return true; } void Gamepause::menuContinueCallback(CCObject* pSender) { CCDirector::sharedDirector()->popScene(); }
使用方法

 在游戲主界面init函數加個:

CCMenuItemImage *pCloseItem = CCMenuItemImage::create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuPauseCallback)); pCloseItem->setPosition(ccp(visibleSize.width - pCloseItem->getContentSize().width/2 , visibleSize.height - pCloseItem->getContentSize().height/2)); // create menu, it's an autorelease object CCMenu* pMenu = CCMenu::create(pCloseItem, NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 1);

然后是回調用的函數 暫停界面((記得加上面的頭文件就是了)

void HelloWorld::menuPauseCallback(CCObject* pSender) { //得到窗口的大小 CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCRenderTexture *renderTexture = CCRenderTexture::create(visibleSize.width,visibleSize.height); //遍歷當前類的所有子節點信息,畫入renderTexture中。 //這里類似截圖。 renderTexture->begin(); this->getParent()->visit(); renderTexture->end(); //將游戲界面暫停,壓入場景堆棧。并切換到GamePause界面 CCDirector::sharedDirector()->pushScene(Gamepause::scene(renderTexture)); }

這里來看看效果:



效果就是這樣了,基本實現了游戲暫停的功能了。上面的代碼可以直接拿去用,自己把圖片改改就好了


2、游戲暫停界面美化實現

單單只有上面的肯定是不行的,太難看了,所以給圖片的按鈕加個背景圖片,然后再加3個按鈕,

這是按鈕背景圖片


這是3個按鈕的圖片

        

要用的直接拿去用,全是我原創的

直接看下代碼,就是在上面的基礎上來增加函數的

Gamepause.h

#ifndef __Gamepause__H__ #define __Gamepause__H__ #include "cocos2d.h" USING_NS_CC; class Gamepause : public cocos2d::CCLayer { public: virtual bool init(); static cocos2d::CCScene* scene(CCRenderTexture* sqr); CREATE_FUNC(Gamepause); //繼續游戲 void menuContinueCallback(CCObject* pSender); //重新開始游戲 void menuRestart(CCObject* pSender); //回主界面 void menuLogin(CCObject* pSender); private: }; #endif // __Gamepause_H__

Gamepause.cpp
#include "Gamepause.h" #include "HelloWorldScene.h"//重新開始游戲的頭文件 //傳入1個CCrenderTexture //相當于1個正在運行的游戲的截圖作為這個暫停對話框的背景 //這樣就看起來像是對話框在游戲界面之上,1般游戲當中都是這模樣寫的。 CCScene* Gamepause::scene(CCRenderTexture* sqr) { CCScene *scene = CCScene::create(); Gamepause *layer = Gamepause::create(); scene->addChild(layer,1);//把游戲層放上面,我們還要在這上面放按鈕 //增加部份:使用Game界面中截圖的sqr紋理圖片創建Sprite //并將Sprite添加到GamePause場景層中 //得到窗口的大小 CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); CCSprite *back_spr = CCSprite::createWithTexture(sqr->getSprite()->getTexture()); back_spr->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); //放置位置,這個相對中心位置。 back_spr->setFlipY(true); //翻轉,由于UI坐標和OpenGL坐標不同 back_spr->setColor(cocos2d::ccGRAY); //圖片色彩變灰色 scene->addChild(back_spr); //添加游戲暫停背景小圖,用來放按鈕 CCSprite *back_small_spr = CCSprite::create("back_pause.png"); back_small_spr->setPosition(ccp(visibleSize.width/2,visibleSize.height/2)); //放置位置,這個相對中心位置。 scene->addChild(back_small_spr); return scene; } bool Gamepause::init() { if ( !CCLayer::init() ) { return false; } //得到窗口的大小 CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize(); //原點坐標 CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); //繼續游戲按鈕 CCMenuItemImage *pContinueItem = CCMenuItemImage::create( "pause_continue.png", "pause_continue.png", this, menu_selector(Gamepause::menuContinueCallback)); pContinueItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2+30)); //重新開始游戲按鈕 CCMenuItemImage *pRestartItem = CCMenuItemImage::create( "pause_restart.png", "pause_restart.png", this, menu_selector(Gamepause::menuRestart)); pRestartItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2⑵0)); //回主界面 CCMenuItemImage *pLoginItem = CCMenuItemImage::create( "pause_login.png", "pause_login.png", this, menu_selector(Gamepause::menuLogin)); pLoginItem->setPosition(ccp( visibleSize.width/2 ,visibleSize.height/2⑺0)); // create menu, it's an autorelease object CCMenu* pMenu = CCMenu::create(pContinueItem,pRestartItem,pLoginItem,NULL); pMenu->setPosition(CCPointZero); this->addChild(pMenu, 2); return true; } void Gamepause::menuContinueCallback(CCObject* pSender) { CCDirector::sharedDirector()->popScene(); } //重新開始游戲 void Gamepause::menuRestart(CCObject* pSender) { CCDirector::sharedDirector()->replaceScene(HelloWorld::scene()); } //回主界面 void Gamepause::menuLogin(CCObject* pSender) { }


最后再來看看效果:





3、思路總結

            游戲暫停將當前界面截圖,然后這個張圖去創建1個層,然后就是push場景和pop場景了。


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 欧美精品videosex极品 | 亚洲国产日韩欧美 | 亚洲日比视频 | 亚洲视色 | 性欧美高清video | 免费精品美女久久久久久久久久 | 国产成人啪午夜精品网站男同 | 久久天堂 | 一区二区三区欧美视频 | 一二三四视频免费观看在线看 | 91九色成人| 亚洲码在线观看 | 成年人在线视频网站 | 被男人吃奶添下面好舒服视频 | 亚洲精品视频网 | 男女爱爱免费网站视频在线观看 | 亚洲国产欧美日韩一区二区 | 成人性色生活影片 | 亚洲欧美日韩不卡一区二区三区 | 日韩免费一级片 | 成人精品美女隐私漫画 | 亚洲国产成人在线视频 | 人人爱人人射 | 亚色成人 | 日本一区二区三区在线 视频观看免费 | 欧美黑人巨大xxxx | 欧美男男作爱gayxxx | 日韩欧美国产一区二区三区 | 国产18在线 | 全国精品影院 | 亚洲成人图 | 色妞色综合久久夜夜 | 小说区亚洲区 | 2020久久精品亚洲热综合 | xoxoxo日本护士 | 日韩中文字幕视频在线观看 | 欧美另类激情 | 叼嘿视频在线观看 | 欧美成人免费网在线观看 | 免费高清毛片在线播放视频 | 久久五月视频 |