cocos 3.2游戏暂停功能
2015-05-12 18:41
260 查看
<方法1>自写递归暂停类
1,GamePauseUtils.h
2,GamePauseUtils.cpp
特点:适合所有情况,值需要把不需要暂停的节点用Tag标志即可。
<方法2>
Director::getInstance()->pause()
特点:不常用,因为会关闭掉渲染。不友好。
<方法3>onExit与onEnter
暂停
恢复
<方法4>pushScene与popScene
暂停
恢复
特点:这种暂停其实是,新建了一个场景。覆盖到上面。
<方法5>推荐,大海战中用的
暂停
function NewBattleUILayer:onPauseGameClick( sender, eventType )
if eventType == ccui.TouchEventType.ended then
GameScene.CurGameScene:pauseActionAndSchedule( true )
cc.Director:getInstance():getRunningScene():addChild( BattlePauseLayer:create(), 777777 )
end
end
恢复
function BattlePauseLayer:_soundStatusWriteFile()
GameScene.CurGameScene:resumeActionAndSchedule()
cc.UserDefault:getInstance():setBoolForKey( "isMusicClose", self.isMusicClose )
cc.UserDefault:getInstance():flush()
cc.UserDefault:getInstance():setBoolForKey( "isEffectClose", self.isEffectClose )
cc.UserDefault:getInstance():flush()
self:removeFromParent()
end
1,GamePauseUtils.h
// // GamePauseUtils.h // AdventureKing // // Created by jianan on 15/5/12. // // #ifndef __AdventureKing__GamePauseUtils__ #define __AdventureKing__GamePauseUtils__ #include "cocos2d.h" USING_NS_CC; //操作类型 typedef enum OPERATE_TYPE{ OPERATE_TYPE_PAUSE, OPERATE_TYPE_RESUME }OPERATE_TYPE; // class GamePauseUtils { public: GamePauseUtils(); ~GamePauseUtils(); static GamePauseUtils* getInstance(); void operateAllSchedulerAndActions(Node* node, OPERATE_TYPE type, int ignoreTag); //忽略检测的tag }; #endif /* defined(__AdventureKing__GamePauseUtils__) */
2,GamePauseUtils.cpp
// // GamePauseUtils.cpp // AdventureKing // // Created by jianan on 15/5/12. // // #include "GamePauseUtils.h" static GamePauseUtils* instance = NULL; GamePauseUtils::GamePauseUtils(){ } GamePauseUtils::~GamePauseUtils(){ } GamePauseUtils* GamePauseUtils::getInstance(){ if(instance == NULL){ instance = new GamePauseUtils(); } return instance; } void GamePauseUtils::operateAllSchedulerAndActions(Node* node, OPERATE_TYPE type, int ignoreTag){ if(node->isRunning()){ switch(type){ case OPERATE_TYPE_PAUSE: node->pause(); break; case OPERATE_TYPE_RESUME: node->resume(); break; } Vector<Node*> array = node->getChildren(); if(array.size() > 0){ for(Vector<Node*>::iterator iter = array.begin(); iter != array.end();){ Node* child = *iter; if(child->getTag() == ignoreTag){ iter++; }else{ iter++; this->operateAllSchedulerAndActions(child, type, ignoreTag); } } } } }3,暂停
GamePauseUtils::getInstance()->operateAllSchedulerAndActions(rootLayer, OPERATE_TYPE_PAUSE, IGNORE_TAG);4,恢复
GamePauseUtils::getInstance()->operateAllSchedulerAndActions(rootLayer, OPERATE_TYPE_RESUME, IGNORE_TAG);
特点:适合所有情况,值需要把不需要暂停的节点用Tag标志即可。
<方法2>
Director::getInstance()->pause()
特点:不常用,因为会关闭掉渲染。不友好。
<方法3>onExit与onEnter
class SecondScene : public Layer { public: static cocos2d::Scene* createScene(); static Layer* createLayer(Node* pauseNode); virtual bool init(); void menuCloseCallback1(cocos2d::Ref* pSender); CREATE_FUNC(SecondScene); Node* _pauseNode; };
暂停
this->onExit(); Director::getInstance()->getRunningScene()->addChild(SecondScene::createLayer(this));
恢复
Layer* SecondScene::createLayer(Node* pauseNode) { auto layer = SecondScene::create(); layer->_pauseNode = pauseNode; return layer; } bool SecondScene::init() { if (!Layer::init()){ return false; } Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(SecondScene::menuCloseCallback1, this)); closeItem->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2)); auto menu = Menu::create(closeItem, NULL); menu->setPosition(Vec2::ZERO); this->addChild(menu, 1); return true; } void SecondScene::menuCloseCallback1(Ref* pSender){ this->_pauseNode->onEnter(); this->removeFromParent(); }特点:同方法1,只是看起来更优雅一点
<方法4>pushScene与popScene
暂停
auto scene = SecondScene::createScene(); Director::getInstance()->pushScene(scene);
Scene* SecondScene::createScene() { auto scene = Scene::create(); auto layer = SecondScene::create(); scene->addChild(layer); return scene; }
恢复
Director::getInstance()->popScene();
特点:这种暂停其实是,新建了一个场景。覆盖到上面。
<方法5>推荐,大海战中用的
暂停
function NewBattleUILayer:onPauseGameClick( sender, eventType )
if eventType == ccui.TouchEventType.ended then
GameScene.CurGameScene:pauseActionAndSchedule( true )
cc.Director:getInstance():getRunningScene():addChild( BattlePauseLayer:create(), 777777 )
end
end
恢复
function BattlePauseLayer:_soundStatusWriteFile()
GameScene.CurGameScene:resumeActionAndSchedule()
cc.UserDefault:getInstance():setBoolForKey( "isMusicClose", self.isMusicClose )
cc.UserDefault:getInstance():flush()
cc.UserDefault:getInstance():setBoolForKey( "isEffectClose", self.isEffectClose )
cc.UserDefault:getInstance():flush()
self:removeFromParent()
end
相关文章推荐
- 【Cocos游戏实战】功夫小子第七课之游戏主功能场景逻辑功能和暂停功能场景的分析和实现
- 【Cocos游戏实战】功夫小子第七课之游戏主功能场景逻辑功能和暂停功能场景的分析和实现
- 【Cocos2dx】利用导演类、场景类完成重新开始游戏、暂停游戏、关闭游戏功能
- cocos游戏开发-用户触摸功能的实现
- 读 Beginning Android Games 2nd Edition (十一) 加入游戏暂停/恢复功能
- Cocos3.4 横版游戏制作-《KillBear》-暂停层+屏蔽下层监听
- 【Cocos游戏实战】功夫小子第六课之游戏主功能场景的分析和实现
- 实现游戏暂停与恢复功能
- Cocos2d-x 3.2 lua飞机大战开发实例(三)道具的掉落,碰撞检测,声音,分数,爆炸效果,完善游戏的功能细节
- 【Cocos游戏实战】功夫小子第五课之帮助场景和选关功能的实现
- 【Cocos游戏实战】功夫小子第四课之设置功能和图籍场景的实现
- pygame游戏之旅13:添加游戏暂停功能
- 实现 iPhone 游戏暂停功能的方法
- Cocos暂停和重新开始游戏
- Time之游戏暂停功能
- 游戏开发敏感词屏蔽的功能实现
- cocos2d-x 2.2.x 游戏暂停界面
- php实现的中秋博饼游戏之掷骰子并输出结果功能详解
- cocos2d-3.2+python+NDK搭建游戏开发环境
- cocos2d游戏集成IOS 友盟统计功能