Cocos2d-x 3.2 学习笔记(十六)保卫萝卜 游戏主循环与定时器
2015-01-19 16:46
393 查看
保卫萝卜~想法一直存在于想法,实战才是硬道理!有想法就去实现,眼高手低都是空谈。
一、游戏主循环GameSchedule
主循环是游戏处理逻辑,控制游戏进度的地方,处理好主循环是很重要的。写一个简单的游戏主循环是很有必要的~
游戏主循环有开始、有结束、有暂停、有恢复把握好进度,控制好游戏,处理好逻辑。我在Cocos2dx进入主场景时开启游戏主循环,在永远不再使用时删除主循环,在游戏暂停时pause主循环,在游戏恢复时resume主循环。
GameDelayTime.cpp
三、结合
游戏主循环与定时器基本就这样了,我的实现比较简单。
简单出兵应用:
简单的控制主循环实现游戏的暂停逻辑处理。目前是比较简单的实现,希望后续能想到更好的idea。
一、游戏主循环GameSchedule
主循环是游戏处理逻辑,控制游戏进度的地方,处理好主循环是很重要的。写一个简单的游戏主循环是很有必要的~
游戏主循环有开始、有结束、有暂停、有恢复把握好进度,控制好游戏,处理好逻辑。我在Cocos2dx进入主场景时开启游戏主循环,在永远不再使用时删除主循环,在游戏暂停时pause主循环,在游戏恢复时resume主循环。
#ifndef __GameSchedule__ #define __GameSchedule__ #include "cocos2d.h" USING_NS_CC; class GameSchedule : public Ref { public: static GameSchedule* getInstance(); void start(); void end(); static void pause(); static void resume(); private: virtual void onExit(); ~GameSchedule(); void globalUpdate(float time); void init(); }; #endif
#include "GameDelayTime.h" static GameDelayTime* _instance = nullptr; GameDelayTime* GameDelayTime::getInstance() { if(!_instance) { _instance = new GameDelayTime(); _instance->init(); } return _instance; } void GameDelayTime::init() { } DelayTimeDate* GameDelayTime::addDelayTimeCallBack( float delayTime,std::function<void()> callback ) { auto delayTimeDate = DelayTimeDate::create(delayTime,callback); _keyMap.push_back(delayTimeDate); return delayTimeDate; } void GameDelayTime::removeDelayTimeCallBack( DelayTimeDate* delayTimeDate ) { int size = _keyMap.size(); while (size-->0) { if(delayTimeDate == _keyMap.at(size) ) { _keyMap.erase(_keyMap.begin()+size); CC_SAFE_DELETE(delayTimeDate); break; } } } void GameDelayTime::UpdateTime(float time) { int size = _keyMap.size(); while (size-->0) { auto delayTimeDate = _keyMap.at(size); if( delayTimeDate != nullptr ) { bool isCallBack = delayTimeDate->update(time); if( isCallBack ) { removeDelayTimeCallBack(delayTimeDate); } } } } DelayTimeDate* DelayTimeDate::create( float delayTime,std::function<void()> callback ) { DelayTimeDate* delayTimeDate = new DelayTimeDate(); delayTimeDate->init(delayTime,callback); return delayTimeDate; } bool DelayTimeDate::update(float time) { _time+=time; if( _time >= getDelayTime() ) { if( callback ) { callback(); return true; } } return false; }
GameDelayTime.cpp
三、结合
游戏主循环与定时器基本就这样了,我的实现比较简单。
简单出兵应用:
简单的控制主循环实现游戏的暂停逻辑处理。目前是比较简单的实现,希望后续能想到更好的idea。
相关文章推荐
- Cocos2d-x 3.2 学习笔记(十三)CocoStudio UI编辑器 by 保卫萝卜
- Cocos2d-x 3.2 学习笔记(十五)保卫萝卜 场景与数据
- Cocos2d-x 3.2 学习笔记(十四)保卫萝卜之界面UI
- 我的Cocos2d-x学习笔记(九)游戏帧循环(游戏主循环)
- Cocos2d-x学习笔记(十六)之 定时器(时间调度)
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角加入动作
- 我的Cocos2d-x学习笔记(九)游戏帧循环(游戏主循环)
- cocos2d-x 3.0游戏实例学习笔记 《跑酷》第四步--地图循环&主角添加动作
- cocos2d-x学习笔记 -- 游戏存档,切换高清,图片处理
- 移动2D游戏框架 Cocos2d-x 学习笔记
- 【Cocos2d-html5游戏引擎学习笔记(1)】游戏引擎初探究和搭建开发环境
- 【Cocos2d-X开发学习笔记】第28期:游戏中音乐和音效的使用
- 【Cocos2d-X开发学习笔记】第27期:游戏背景之贴图地图类(CCTileMapAtlas)的使用
- 【Cocos2d-X开发学习笔记】第27期:游戏背景之贴图地图类(CCTileMapAtlas)的使用
- 【Cocos2d-X开发学习笔记】第29期:游戏中数据的存储(上)
- 【Cocos2d-html5游戏引擎学习笔记(2)】Hello Cocos2d-Html5
- 【Spring学习笔记】之【3.2 避免循环依赖】
- cocos2d-x游戏开发学习笔记
- 【Cocos2d-X开发学习笔记】第28期:游戏中音乐和音效的使用
- cocos2d-x学习笔记(18)--游戏打包(windows平台)