知识点:
//暂停游戏
cocos2d::CCDirector::sharedDirector()->pause();
//恢复游戏
cocos2d::CCDirector::sharedDirector()->resume();
cocos2d暂停游戏时保存当前的状态。
CCNode * node = SceneManager::getLoadCcbiNode(ccbi_fileName_pausegame, ccbi_nodeName_pausegame, GamePauseLoader::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();
}
用于释放 加载顺序进入新场景后,该场景被释放)场景初始化 加载顺序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();
}
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 =new cocos2d::extension::CCBReader(lib);
lib->registerCCNodeLoader(nodeName, nodeLoader);
std::string filePath =ccbi_path+fileName;
CCNode* layer = reader->readNodeGraphFromFile(filePath.c_str());
reader->release();
return layer;
}