您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x 3.2 学习笔记(十六)保卫萝卜 游戏主循环与定时器

2015-01-19 16:46 393 查看
保卫萝卜~想法一直存在于想法,实战才是硬道理!有想法就去实现,眼高手低都是空谈。

一、游戏主循环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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: