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,$ ...
随机推荐
- mono for android 各版本下载地址
window下 在XamarinStudio 检查更新,会在这个目录下生成LOG和下载文件,所以可以从里面复制出来,查看真实下载地址 C:\Users\用户名\AppData\Local\Xamari ...
- Erlang在Windows上开发环境搭建全过程讲解目录
我会按照下面的列表来一步一步讲解,在windows来开发Erlang所用到的一些工具,和知识.我会不停的添加和修正. Erlang运行时环境 Erlang开发工具选择 Rebar来构建,编译,测试,发 ...
- wxGlade的图标,竟来自名画!
一直用wxGlade做GUI的,今天突然发现它的图标和一副油画很像,查了下资料果然如此. wxGlade的图标,而且图标的文件名竟然就叫做mondrian.ico 下面是蒙德里安的作品,<构图 ...
- (转)Unity AssetBundle爬坑手记
转自:http://www.cnblogs.com/ybgame/p/3973177.html 这篇文章从AssetBundle的打包,使用,管理以及内存占用各个方面进行了比较全面的分析,对Asset ...
- 微软再次要求Google审查官方链接 称将进行调查
之前代表微软向Google发出DMCA删除通知的反盗版公司再次要求Google审查Microsoft.com官网链接.微软对此表示将进行调查,已经要求反盗版公司停止以微软的名义发出DMCA通知. 仅仅 ...
- noty – jQuery通知插件
noty是一个jQuery的通知(信息提示)插件,灵活轻便,是一个非常棒的用于替代传统提示对话框的插件. 当前最新版本为2.1.0: 从https://github.com/needim/noty 可 ...
- dex分包变形记
腾讯Bugly特约作者:李金涛 一.背景 就在项目灰度测试前不久,爆出了在 Android 3.0以下手机上安装时出现 INSTALL _ FAILED_DEXOPT,导致安装失败.这一问题意味着项目 ...
- 微软颜龄Windows Phone版开发小记
随着微软颜龄中文网cn.how-old.net的上线,她也顺势来到了3大移动平台. 用户在微软颜龄这一应用中选择一张包含若干人脸的照片,就可以通过云计算得到他们的性别和年龄. 今天我们就和大家分享一下 ...
- dojo/dom-construct.toDom方法学习笔记
toDom方法用来将html标签字符串转化成DOM节点.1.7之后toDom方法被分配到了dom-construct模块. require(["dojo/dom-construct" ...
- 浅析Ajax跨域原理及JQuery中的实现分析
AJAX 的出现使得网页可以通过在后台与服务器进行少量数据交换,实现网页的局部刷新.但是出于安全的考虑,ajax不允许跨域通信.如果尝试从不同的域请求数据,就会出现错误.如果能控制数据驻留的远程服务器 ...