实现游戏暂停与恢复功能

来源:互联网 发布:广数系统g76怎么编程 编辑:程序博客网 时间:2024/05/16 14:32

知识点:

//暂停游戏

   cocos2d::CCDirector::sharedDirector()->pause();

//恢复游戏

    cocos2d::CCDirector::sharedDirector()->resume();

cocos2d暂停游戏时保存当前的状态。

CCNode * node = SceneManager::getLoadCcbiNode(ccbi_fileName_pausegameccbi_nodeName_pausegameGamePauseLoader::loader());

        addChild(node,2);}

在封装好的 scenemanager中 绑定加载ccbi文件,添加到本类中 第二层   此处简写,原始为this->addChild(node,2);

详解:

执行pause暂停函数 叠加 暂停界面到游戏界面  复合函数/方法,习惯操作:函数提出另写其方法 

/**

暂停游戏 

@param sender <#sender description#>

 */

voidPlayGameScene::pauseGame(CCObject *sender){

    pause();  //执行函数  

    CCLog("pauseGame");        

    CCNode * node =SceneManager::getLoadCcbiNode(ccbi_fileName_pausegame,ccbi_nodeName_pausegame,GamePauseLoader::loader());

        addChild(node,2);}

游戏暂停实现:

void PlayGameScene::pause(){

    CCLog("CCAlert::onEnter()");    

    cocos2d::CCDirector::sharedDirector()->pause();

}    

原理:1首先构造函数(用于初始化一些变量 加载顺序 1),析构函数(

用于释放  加载顺序进入新场景后,该场景被释放)场景初始化 加载顺序2

GamePauseScene::GamePauseScene(){

CCLog("GamePauseScene::GamePauseScene()");

}

GamePauseScene::~GamePauseScene(){

CCLog("GamePauseScene::~GamePauseScene()");

}

 bool GamePauseScene::init() {

if ( !CCLayer::init() )    { returnfalse; }

CCLog("GamePauseScene::init()"); returntrue;}

2将cocosbuilder菜单与对象连接(绑定),之后执行 

代码固定如下:

/**

 用于连接ccbi文件中的菜单按钮

 @param pTarget 菜单按钮对象

 @param pSelectorName 菜单连接的名称

 @returns <#return value description#>

 */

SEL_MenuHandlerGamePauseScene::onResolveCCBCCMenuItemSelector(CCObject * pTarget,CCString * pSelectorName)

{CCB_SELECTORRESOLVER_CCMENUITEM_GLUE(this,"jixuGame",GamePauseScene::jixuGame); returnNULL;}

用于连接ccbi文件中的普通按钮或精灵

SEL_CCControlHandlerGamePauseScene::onResolveCCBCCControlSelector(CCObject * pTarget,CCString * pSelectorName){return NULL;}

用于连接ccbi文件中的对象

boolGamePauseScene::onAssignCCBMemberVariable(CCObject * pTarget, CCString * pMemberVariableName,CCNode * pNode){

return false;

}

ccbi文件加载完成后执行该方法 

void GamePauseScene::onNodeLoaded(CCNode * pNode,cocos2d::extension::CCNodeLoader * pNodeLoader){

CCLog("onNodeLoadedonNodeLoadedonNodeLoaded");    

    CCSize size =CCDirector::sharedDirector()->getWinSize();

}

/**

3(返回继续游戏)方法的实现

 继续游戏

 @param sender 菜单对象

 */

void GamePauseScene::jixuGame(CCObject *sender)

{   

       CCLog("jixuGame");

    PlayGameScene *a = (PlayGameScene *)this->getParent();    

    a->testGame();    

    this->removeFromParentAndCleanup(true);//   移除父类 

    cocos2d::CCDirector::sharedDirector()->resume();   

}

备注:A:
void GamePauseScene::onEnter(){  

    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, -128, true);

   CCLayer::onEnter();

}

void GamePauseScene::onExit(){

    CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);

        CCLayer::onExit();

}

暂时理解为 执行场景的优先级 

B:封装 

/**

加载 ccbi文件

@param fileName文件名称

@param nodeName关联的名字用于关联class

@param nodeLoader加载器

@returns node

 */

CCNode*SceneManager::getLoadCcbiNode(conststd::string& fileName,const char * nodeName,CCNodeLoader * nodeLoader)

{    CCNodeLoaderLibrary *lib =CCNodeLoaderLibrary::newDefaultCCNodeLoaderLibrary();    

    cocos2d::extension::CCBReader* reader =newcocos2d::extension::CCBReader(lib);

    lib->registerCCNodeLoader(nodeName, nodeLoader);    

   std::string filePath =ccbi_path+fileName;

   CCNode* layer = reader->readNodeGraphFromFile(filePath.c_str());    

    reader->release();   

   return layer;

}

新手,欢迎批评,希望多多指点交流。有比我更迷茫的可以留言,大家来帮你解答
原创粉丝点击