定时器就是指定时间间隔调用指定的函数,去完成特定的功能。
Cocos2d-x定时器为游戏提供定时事件和定时调用服务。所有的Node对象都知道如何调度和取消调度对象,所以也有人管定时器叫调度器。
二.使用定时器有以下几个好处:
1.每当Node不再可见或已从场景中移除时,定时器会停止。Cocos2d-x暂停时,定时器也会停止,比如Node被删除或setVisible(false)时与其绑定的定时器会被停止,使用Director的Pause()方法暂停游戏时定时器也会被停止掉;
2.当Cocos2d-x重新开始时,定时器也会自动继续启动,如执行Director的Resume()方法时;
3.Cocos2d-x封装了一个供各种不同平台使用的定时器,就是说cocos的定时器是跨平台的。
三.Cocos2d-x调度器分3种:
默认调度器:scheduleUpdate()
自定义调度器:schedule()
单次调度器:scheduleOnce()
四.下面我们就来依次看看这3种调度器是怎么使用的:
一).默认调度器:schedulerUpdate()
默认调度器使用Node的刷新事件update方法,该方法在每帧绘制之前都会被调用一次。
我们在使用默认调度做蠢器(schedulerUpdate)时候,需要重载Node的update方法来执行自己的逻辑代码。如果需要停止这个调度器,可以使用unschedulerUpdate()方法。
接下来举个例子来看看默认调度器的具体实现,新建一个cocos工程,我们只在HelloWorldScene.h和HelloWorldScene.cpp这两个文件中做修改:
1).首先在头文件HelloWorldScene.h里声明重写的update方法,这个方法就是默认调度器的回调函数:
//声明系统自带的schedule回调函数
virtual void update(float t)
2).在HelloWorldScene.cpp文件中实现update方法,可以在该方法中执行我们自己的逻辑代码,这里我只做下打印:
//实现schedule的回调函数
void HelloWorld::update(float t)
{
log("update!")
}
3).通过scheduleUpdate()方法执行调度器,该方法是与其回调方法update()绑定到一起的,也就是说该方法一旦被某个Node执行,该Node的update()方法就会被执行,我把它写在.cpp文件的 HelloWorld::init()方法中:
//执行系统调度器
this->scheduleUpdate()
运行结果:
可以看到,执行scheduleUpdate()方法樱胡辩后,update()回调方法会不断执行打印,那么这个update()回调方法多久执行一次呢?前面说了,该方法在每帧绘制之前都会被调用一次,所以理论上在无卡顿情况下每秒执行60次update()方法。
二).自定义调度器:schedule()
顾名思义,该调度器就是我们可以对调度进行相关属性的自定义,比如调度事件触发的时间间隔、触发次数等等。
举个例子:
1).在.h文件中声明自定义调度器的回调函数,注意该方法不是系统的而是我们自己写的,所以方法名也是我们自己起的:
//声明自定义调度器回调函数
virtual void customScheduleCallback(float t)
2).在.cpp文件中实现刚刚声明的回调函数,这里也只做打印:
//实现回调函数
void HelloWorld::customScheduleCallback(float t)
{
log("customScheduleCallback!")
}
3).通过schedule()方法执行自定义调度器,该方法有4个参数:
schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)
参数1:selector为要绑定的回调函数;
参数2:interval为事件触发时间间隔;
参数3:repeat为触发一次事件后还会触发的次数,默认值为kRepeatForever,表示无限触发次数;
参数4:delay表示第一次触发之前的延时。
我还把它写在.cpp文件的 HelloWorld::init()方法中:
//执行自定义调度器
this->schedule(schedule_selector(HelloWorld::customScheduleCallback),2.0,5,3)
运行结果:
注意,第三个参数repeat值为5,表示触发一次事件后还会触发5次,所以一共有6次打印,而且每一次打印输出的时间间隔为2秒。
三).单次调度器:scheduleOnce()
单次调度器只进行一次调度,即只执行一次回调函数。该调度器的使用方法和之前2种调度器基本一致,都是声明回调方法、实现回调方法、使用调度器。
举个例子:
1).在.h文件中声明单次调度器的回调函数:
//声明单次调度器回调函数
virtual void onceScheduleCallback(float t)
2).在.cpp文件中实现回调函数:
//实现回调函数
void HelloWorld::onceScheduleCallback(float t)
{
log("onceScheduleCallback!")
}
3).通过scheduleOnce()方法执行单次调度器,该方法有2个参数:
参数1:要绑定的回调函数
参数2:第一次触发之前的延时
//执行单次调度器
this->scheduleOnce(schedule_selector(HelloWorld::onceScheduleCallback), 3)
运行结果:
可以看到,程序运行3秒后看到了一次打印输出,之后便不再打印了。
最后,一句话总结,使用调度器无非就是使用3个方法:scheduleUpdate()、schedule()、scheduleOnce(),另外写好需要绑定的回调函数,完事!
以上。
点击阅读全文
打开CSDN,阅读体验更佳
Cocos2d-x中关于schedule函数的一点理解_tsbyj的博客
cocos 2dx---schedule(五) zion--6135的博客 238 bool HelloWorld::init() { // 1. super init first if ( !Scene::init() ) { return false} printf("1\n")//this->schedule(CC_SCHEDULE_SELECTOR(HelloWorld::...
cocos 2dx-Lua使用schedule定时器_平淡风云的博客_lua sched...
使用方法很简单 local scheduler = require("framework.scheduler") local handler = scheduler.scheduleGlobal(function() -- 想做的事情 end, 0.2) -- 调用间隔 scheduler.unscheduleGlobal(handler) -- 取消定时器...
cocos2d-x学习笔记(13)--schedule .rar
cocos2d-x学习笔记(13)--schedule .rar
cocos Creator计时器schedule的使用和坑
在游戏开发中,经常会用到计时器,在cocos引擎中,为我们默认提供了多种计时器的使用。在最新的cocos开发工具Cocos Creator中,我们有4种计时器可以使用,分别是js自带的setTimeOut、interval以及cocos的schedule和scheduleOnce,setTimeOut和scheduleOnce都是执行几次 *** 作,指定一定时间后执行,interval和schedule
继续访问
cocos2dx三种定时器的使用以及停止scheduleUpdate,scheduleOnce,schedule(改)
(Sam: 原文作者有笔误,影响理解,这里做了正确的修改) 首先,什么是定时器呢?或许你有时候会想让某个函数不断的去执行,或许只是执行一次,获取你想让他每隔几秒执行一次,ok,这些都可以统统交给定时器来解决。 cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce。了解其功能便会发现定时器真是太方便了,废话不多说,我们逐一学习一下。
继续访问
CocosCreator-Schedule计时器-设定及触发原理
计时器 JavaScript自带的定时任务 setTimeout 作用:设置一个定时器,在指定时间(毫秒)后触发,调用传入的回调函数。 参数类型:(function/code, delayTime, args…) function: 回调函数 code: 字符串形式的代码,会使用eval()执行,因此不推荐使
继续访问
cocoscreate使用定时器schedule
这是标题普通对象使用定时器注册定时器注销定时器特殊对象使用定时器注册定时器注销定时器 普通对象使用定时器 注册定时器 // 一般会在节点生命周期里的start函数里注册定时器 start () { // schedule函数注册定时器,第一个参数是回调函数,第二个参数是间隔时间,第三个参数是执行多少次,也可以不写,不写就是不停的执行 this.schedule(this.onTimeFuntion, 1, 6)// 这行代码表示每秒执行一次onTimeFunti
继续访问
最新发布 Cocos Creator 源码解读之Schedule
creator 里面的计时器相信大家不陌生,但是了解它的原理是必要的,它的运行机制和setInterval有什么不同呢, 先简单说说setInterval的原理:setInterval是每隔一段时间向事件队列里面添加回调函数,如果主线程忙的话调用时间不确定特别容易出问题,由于setInterval只负责定时向队列中添加函数,而不考虑函数的执行,setInterval有一个原则:在向队列中添加回调函数时,如果队列中存在之前由其添加的回调函数,就放弃本次添加(不会影响之后的计时),如果主线程忙的话,之前添加的
继续访问
cocos 2dx--------schedule(五)
bool HelloWorld::init() { // 1. super init first if ( !Scene::init() ) { return false} printf("1\n")//this->schedule(CC_SCHEDULE_SELECTOR(HelloWorld::fun_Callback), 1.0f)//每一秒运行依次fun_Callback()函数 //this->sc.
继续访问
Cocos2d-x lua 使用定时器
打开一个定时器:schedulerID = cc.Director:getInstance():getScheduler():scheduleScriptFunc(调用的function, 定时时间(秒), 是否暂停(true, false)) 关闭定时器:cc.Director:getInstance():getScheduler():unscheduleScriptEntry(schedul...
继续访问
Cocos-2dx lua 定时器
Cocos2dx 3.x Lua 中定时器的两种使用方式: (1)self:scheduleUpdateWithPriorityLua(update, priority) >参数一:刷新函数 >参数二:刷新优先级 其中 self 为 Node类 的子类。 该方法默认为每帧都刷新一次,无法自定义刷新时间间隔。 (2)scheduler:scheduleScriptFunc(update, inteval, false) ...
继续访问
Cocos2d-x 3.x基础学习: 定时器更新schedule/update
大部分游戏中定时器是不可或缺的,因为即每隔一段时间,就要执行相应的刷新体函数,以更新游戏的画面、时间、进度、敌人的指令等等。 Cocos2d-x为我们提供了定时器schedule相关的 *** 作。其 *** 作函数的定义在CCNode中,所以基本上大多数的引擎类都可以设置定时器,如CCLayer、CCSprite、CCMenu等。 定时器更新的方式分为三类: (1)默认定时器 :scheduleUpdate()(2)自定义定时器:schedule()(3)一次性定时器:schedu...
继续访问
cocos2dx三种定时器的使用以及停止schedule,scheduleUpdate,scheduleOnce
今天白白跟大家分享一下cocos2dx中定时器的使用方法。
继续访问
Cocos Creator 分帧加载(js - schedule)
效果 loadingFrame.js cc.Class({ extends: cc.Component, properties: { hello: cc.Prefab, content: cc.Node, mask: cc.Node, // animation: cc.Animation, }, onLoad() { this.mask.active = false// t
继续访问
cocos2dx调度器schedule
cocos2dx调度器schedule Cocos2d-Lua 引擎中的调度器是用来周期执行某个函数或延时执行某个函数的。功能类似于定时触发器,但它又与游戏紧密结合。 schedule调度器利用了timer类来保存了调度任务的 时间线,重复次数,事件间隔,延迟等数据。timer把相关信息以结构体的形式存进了双向链表_hashForTimers中 每帧更新后Timer做事件累加,根据时间线去触发或者取消更新回调。 每帧更新每帧更新...
继续访问
Cocos2d-JS下用schedule实现倒计时
Cocos2d-JS下用schedul实现倒计时 前言 本文所记录的内容是在Cocos Code IDE平台完成的,主要是记录一下2048游戏下用schedule实现倒计时。第一次写博客,如有错误望指教。 提示:以下是本篇文章正文内容,下面案例仅供参考 一、schedule是什么? schedule可以每隔几秒执行某个自定义的函数; 而scheduleOnce是在几秒之后才执行,并且只会执行一次。 二、使用步骤 1.定义 代码如下(示例): 先在对应的游戏层定义倒计时时间 var GameLayer =
继续访问
cocos定时器分析
注:COCOS分析的版本为3.4 COCOS的定时器是通过一个哈希表进行保存的,每一帧循环的时候都会调用定时器的update方法,并传入两帧之间的时间间隔 /*void Scheduler::update(float dt)*/,在update方法中对哈希表进行轮询调用回调函数。 在轮询调用中将定时器分为四种,其中三种是每一帧必定循环调用的方法,struct _listEntry *_upda
继续访问
cocos 定时器schedule
1.schedule如其名,以指定的时间间隔调用一个指定的函数。系统最小间隔是frame time(即帧间隔),可以由自己设定帧间隔 selector调用分为:自定义函数和update 另外动画(action)类型也会和定时器有关 如下使用方式: [self schedule:@selector(gameLogic:) interval:1.0] //表示以1秒时间间隔调用函数game
继续访问
Cocos Creator之schedule第一个时间段不执行的解决方法
1、 schedule的官方文档地址。 2、 介绍如下: 指定回调函数,调用对象等信息来添加一个新的定时器。 如果 paused 值为 true,那么直到 resume 被调用才开始计时。 当时间间隔达到指定值时,设置的回调函数将会被调用。 如果 interval 值为 0,那么回调函数每一帧都会被调用,但如果是这样, 建议使用 scheduleUpdateForTarget 代替。 如果回调函...
继续访问
【爱上cocos2d-x之十六】取消定时器unSchedule
懂得如何创建定时器,当然,我们也要懂得如何取消定时器啦。此文章,建立在前两篇的基础上。 (1)取消默认的定时器,只要一句代码 this->unscheduleUpdate()备注:不管我们注册update函数时,用的是一个还是两个参数,在取消时都不需要传递参数,只需传递函数就可以了。 (2)取消自定义的定时器 this->unschedule(schedule_sel
您好,方法我们首先启动 Cocos Creator,然后选择打开其他项目。
在d出的文件夹选择对话框中,选中我们刚下载并解压完成的 start_project,点击打开按钮。
Cocos Creator 编辑器主窗口会打开,我们将看数悉到项目状态。
在 CoC 中,游戏场景是开发时组织游戏内容的中心,也是呈现给玩家所有游戏内容的载体。
游戏场景中一巧袜般会包括以下内容:场景图像和文字,角色,以组件形式附加在场景节点上的游戏逻辑薯宽乎脚本。
当玩家运行游戏时,就会载入游戏场景,游戏场景加载后就会自动运行所包含组件的游戏脚本,实现各种各样开发者设置的逻辑功能。
CocosCreator放置游戏教程
所以除了资源以外,游戏场景是一切内容创作的基础,让我们现在就新建一个场景。
CocosCreator放置游戏教程
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)