Cocos2d-x 3.2 学习笔记(十六)保卫萝卜 游戏主循环与定时器
保卫萝卜~想法一直存在于想法,实战才是硬道理!有想法就去实现,眼高手低都是空谈。
#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 "GameSchedule.h"
#include "GameDelayTime.h"
#include "SceneMgr.h"
static GameSchedule* _instance = nullptr;
static bool _pause = true; GameSchedule* GameSchedule::getInstance()
{
if( !_instance )
{
_instance = new GameSchedule();
_instance->init();
}
return _instance;
} void GameSchedule::init()
{
_pause = true;
} void GameSchedule::start()
{
log("GameSchedule -----> start ");
_pause = false;
Director::getInstance()->getScheduler()->schedule(schedule_selector(GameSchedule::globalUpdate),this,,false);
} void GameSchedule::end()
{
log("GameSchedule -----> end ");
Director::getInstance()->getScheduler()->unschedule(schedule_selector(GameSchedule::globalUpdate),this);
CC_SAFE_DELETE(_instance);
} void GameSchedule::pause()
{
log("GameSchedule -----> pause ");
_pause = true;
} void GameSchedule::resume()
{
log("GameSchedule -----> resume ");
_pause = false;
} void GameSchedule::globalUpdate(float time)
{
if( _pause ) return;
GameDelayTime::getInstance()->UpdateTime(time);
SceneMgr::getInstance()->UpdateScene(time);
} void GameSchedule::onExit()
{
log("GameSchedule dispose!!!!1111");
} GameSchedule::~GameSchedule()
{
log("GameSchedule dispose!!!!222");
}
GameSchedule.cpp

#ifndef __GameDelayTime__
#define __GameDelayTime__ #include "cocos2d.h"
using namespace std;
USING_NS_CC; class DelayTimeDate
{
public:
static DelayTimeDate* create( float delayTime,std::function<void()> callback );
CC_SYNTHESIZE( float, delayTime, DelayTime );
CC_SYNTHESIZE( std::function<void()>, callback, Callback );
CC_SYNTHESIZE_READONLY( float, time, TotalTime );
bool update(float time);
private:
float _time;
void init( float delayTime,std::function<void()> callback ){
_time = ;
setDelayTime(delayTime);
setCallback(callback);
}
}; class GameDelayTime
{
public:
static GameDelayTime* getInstance();
DelayTimeDate* addDelayTimeCallBack( float delayTime,std::function<void()> callback );
void removeDelayTimeCallBack( DelayTimeDate* delayTimeDate );
void UpdateTime(float time);
private:
vector<DelayTimeDate*> _keyMap; 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-->)
{
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-->)
{
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


Cocos2d-x 3.2 学习笔记(十六)保卫萝卜 游戏主循环与定时器的更多相关文章
- python3.4学习笔记(十六) windows下面安装easy_install和pip教程
python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...
- (C/C++学习笔记) 十六. 预处理
十六. 预处理 ● 关键字typeof 作用: 为一个已有的数据类型起一个或多个别名(alias), 从而增加了代码的可读性. typedef known_type_name new_type_nam ...
- JavaScript权威设计--CSS(简要学习笔记十六)
1.Document的一些特殊属性 document.lastModified document.URL document.title document.referrer document.domai ...
- MySQL学习笔记十六:锁机制
1.数据库锁就是为了保证数据库数据的一致性在一个共享资源被并发访问时使得数据访问顺序化的机制.MySQL数据库的锁机制比较独特,支持不同的存储引擎使用不同的锁机制. 2.MySQL使用了三种类型的锁机 ...
- python 学习笔记十六 django深入学习一 路由系统,模板,admin,数据库操作
django 请求流程图 django 路由系统 在django中我们可以通过定义urls,让不同的url路由到不同的处理函数 from . import views urlpatterns = [ ...
- SharpGL学习笔记(十六) 多重纹理映射
多重纹理就把多张贴图隔和在一起.比如下面示例中,一个表现砖墙的纹理,配合一个表现聚光灯效果的灰度图,就形成了砖墙被一个聚光灯照亮的效果,这便是所谓的光照贴图技术. 多重纹理只在OpenGL扩展库中才提 ...
- yii2源码学习笔记(十六)
Module类的最后代码 /** * Registers sub-modules in the current module. * 注册子模块到当前模块 * Each sub-module shoul ...
- Swift学习笔记十六:协议
Protocol(协议)用于统一方法和属性的名称,而不实现不论什么功能. 协议可以被类.枚举.结构体实现.满足协议要求的类,枚举,结构体被称为协议的遵循者. 遵循者须要提供协议指定的成员,如属性,方法 ...
- PHP学习笔记十六【方法】
<?php //给一个函数传递基本数据类型 $a=90; $b=90.8; $c=true; $d="hello world"; function test1($a,$b,$ ...
随机推荐
- 第59讲:Scala中隐式转换初体验
今天学习了下隐式转换的内容.所谓隐式转换,就是说,一个实例拥用1 2 3方法,但是当它需要4方法的时候,它没有,但是却可以通过转换成另一种类型来调用4方法,而且这种转换是自动转换不需要人为干预的,这种 ...
- java基础4_字符串
一 字符串 Java字符串关键字是String,是一个类,创建新的字符串即创建一个新的对象. 1.字符串的声明及初始化. String str; //只做声明 String str1="aa ...
- Zookeeper初次使用
下面介绍Linux系统中Zookeeper的初次使用方法. 1.jdk安装和zookeeper下载 首先从jdk官网中下载jdk文件,然后将文件放在/usr/local/java目录下解压,并打开.b ...
- Excel VBA自定义函数编写(UDF, User-Defined Function)
虽然知道Microsoft Office Excel可以支持用VB语言来进行复杂的编程和自定义函数的编写,但是一直以来都没有这个需求. 这次遇到的问题是要根据一列数组计算出一个值,但计算过程又比较复杂 ...
- 使用knockout-sortable实现对自定义菜单的拖拽排序
在开始之前,照例,我们先看效果和功能实现. 关于自定义菜单的实现,这里就不多说了,需要了解的请访问:http://www.cnblogs.com/codelove/p/4838766.html 这里需 ...
- JS写的排序算法演示
看到网上有老外写的,就拿起自已之前完成的jmgraph画图组件也写了一个.想了解jmgraph的请移步:https://github.com/jiamao/jmgraph 当前演示请查看:http:/ ...
- 使用XtraReport的CalculatedFiled(计算字段)实现RDLC报表中表达式
DevExpress报表确实强大,花样繁多,眼花缭乱. 这次使用XtraReport开发报表,很多问题在官方的文档中并没有详细的说明,特此记录. 1.XtraReport中FormattingRule ...
- dojo Provider(script、xhr、iframe)源码解析
总体结构 dojo/request/script.dojo/request/xhr.dojo/request/iframe这三者是dojo提供的provider.dojo将内部的所有provider构 ...
- Etag缓存在PHP和NodeJS中的实现
HTTP 提供了许多页面缓存的方案,其中属 Etag 和 Last-Modified 应用最广.本文会先介绍 Etag 的应用场景,然后说说他在 php 和 node 中的使用. 本文地址:http: ...
- java提高篇(二二)---LinkedList
一.概述 LinkedList与ArrayList一样实现List接口,只是ArrayList是List接口的大小可变数组的实现,LinkedList是List接口链表的实现.基于链表实现的方式使得L ...