quick-cocos2d-x学习笔记【7】——定时器

定时器用的地方还是比较多的,游戏中的逻辑判断很多都是采用每帧执行。quick对于schedule的封装在scheduler这个lua文件中。如果是第一次接触quick的话,可能按照官方的api来写一个定时器被报错,提示schedule是一个nil值,这是因为其他的模块在初始化时都是被加载的,唯独这个scheduler没有载入,所以在使用的时候,第一件事是引入这个模块,

local scheduler = require("framework.scheduler")

剩下的就可以看着api来写了,在写quick的定时器之前还是再复习一下cocos2dx原生lua对于定时器的写法。

每帧调用的,

void scheduleUpdateWithPriority (int priority)

void scheduleUpdateWithPriorityLua (int nHandler,int priority)

指定调用间隔时间的,

unsigned int scheduleScriptFunc (unsigned int nHandler, float fInterval, bool bPaused)

还有取消定时器事件

void unscheduleScriptEntry (unsigned int uScheduleScriptEntryID)

quick的scheduler主要是对后面两个函数的封装。在c++的cocos使用中,我们使用定时器,无非就是每帧调用,间隔时间调用无数次,间隔时间调用指定次数,间隔时间调用一次,取消调用这几个。

我们依次来看下,

每帧调用,

    local time = 0
    local function update(dt)
        time = time + 1
        label:setString(string.format("%d", time))
    end

    scheduler.scheduleUpdateGlobal(update)

间隔一定时间调用,

    local time = 0
    local function onInterval(dt)
        time = time + 1
        label:setString(string.format("%d", time))
    end

    scheduler.scheduleGlobal(onInterval, 1)

间隔时间调用一次,这个封装的不错,很常用

    local time = 0
    local function onInterval(dt)
        time = time + 1
        label:setString(string.format("%d", time))
        print("over")
    end

    scheduler.performWithDelayGlobal(onInterval, 1)

可以看下这个是怎么实现的,

function scheduler.performWithDelayGlobal(listener, time)
    local handle
    handle = sharedScheduler:scheduleScriptFunc(function()
        scheduler.unscheduleGlobal(handle)
        listener()
    end, time, false)
    return handle
end

其实就是在间隔一定时间后,将其停止,然后执行一次回调函数就可以了。

封装的最后一个是停止这些定时器,

scheduler.unscheduleGlobal()

它的参数是前面那些定时器返回的句柄,所以如果需要在后面停止掉,记得在创建的留一个返回值就好了。

不过在游戏中,我们可能会做一个倒计时,也就是间隔一定时间调用指定的次数,这个是在quick中没有封装的,但是我们还是可以自己动手实现一下,原理也很简单,每次执行一次就计个数,达到指定的次数就停止定时器,

    local handle
    local interval = 1
    local repeatIndex = 3
    local index = 0
    local sharedScheduler = CCDirector:sharedDirector():getScheduler()
    handle = sharedScheduler:scheduleScriptFunc(function()
        index = index + 1
        label:setString(string.format("%d", index))
        if index >= repeatIndex then
            scheduler.unscheduleGlobal(handle)
            print("over")
        end
    end, interval, false)

效果如图

这样就ok了,大家可以自己试一试哈。

定时器就是这样子了。

quick-cocos2d-x学习笔记【7】——定时器

时间: 2024-08-29 19:26:32

quick-cocos2d-x学习笔记【7】——定时器的相关文章

java学习笔记之定时器

定时器 1 package pack01_timer; 2 3 import java.io.File; 4 import java.text.ParseException; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 import java.util.Timer; 8 import java.util.TimerTask; 9 10 class MyTimer extends TimerTask{ 11 pri

quick cocos2d x 手机(Android端)启动过程学习

简要学习下quick cocos2d x 在安卓端启动的过程. 首先需要了解一点:quick cocos2d x是依托于Android的activity和GLSurfaceView(继承自SurfaceView)的环境来显示quick层的游戏界面. (1)首先quick类的android游戏从AndroidManifest.xml文件指定的activity(假设AC)启动. (2)AC继承父类的Cocos2dxActivity. (3)调用静态初始化块,加载cocos2dx的动态库.也就是一些C

Cocos2D学习笔记(1)- 常用的类

1.坐标系 >屏幕坐标系(UIKit):原点在左上角! >OpenGl坐标系:原点在屏幕的左下角! 2.游戏设计:Director--Scene--Layer--Sprite. >CCDirector:导演类,相当于是游戏策划,负责整个游戏的布局和运行规则的制定. >CCScene:场景类,每个场景可以是一个界面或一个关卡. >CCLayer:图层类,为了方便游戏界面的渲染管理. >CCSprite:精灵类, 小结:一个导演类(CCDirector)可以指挥多个场景类(

STM32学习笔记4(TIM32位定时器的实现)

关于STM32的CPU为32位,定时器却为16位的探讨 STM32的通用定时器可以实现很多功能,例如:定时计数.测量外部信号脉冲宽度.产生PWM波形.测量输入的PWM波形等.在所有这些操作中,定时器的位数主要影响两个参数,一个是定时或测量的精度,另一个是定时的时间长度.下面我们以一个列表看一下定时的精度和定时的长度有多少: 关于各个预分频器的作用请参考下图的右半部分: 从表中可以看出,在最高精度下(14ns)定时长度只有0.91ms,在精度为250ns(即4MHz)时定时长度可达16.38ms.

quick cocos2d x场景切换的生命周期函数调用学习

先上一个场景的基本模版: 1 local ModelScene = class("ModelScene", function() 2 return display.newScene("ModelScene") 3 end) 4 5 function ModelScene:ctor() 6 self.sceneName = "ModelScene" 7 -- 注册点击事件监听 8 self.layer = display.newLayer() 9

QT学习笔记(14) 定时器类DTimer的使用

一. 在前面的学习笔记中,我们已经学习定时器事件http://www.cnblogs.com/blog-ccs/p/7445323.html 现在,我们学习QTimer定时器类,比较优劣. 二.示例代码 widget.h 1 #ifndef WIDGET_H 2 #define WIDGET_H 3 4 #include <QWidget> 5 #include <QTimer>//定时器对象 6 7 namespace Ui { 8 class Widget; 9 } 10 11

STM32学习笔记2(TIM模块定时器)

TIM模块定时器向上溢出 & 输出比较 首先我们必须肯定ST公司的实力,也承认STM32的确是一款非常不错的Cortex-M3核单片机,但是,他的手册实在是让人觉得无法理解,尤其是其中的TIM模块,没有条理可言,看了两天几乎还是不知所云,让人很是郁闷.同时配套的固件库的说明也很难和手册上的寄存器对应起来,研究起来非常费劲!功能强大倒是真的,但至少也应该配套一个让人看的明白的说明吧~~两天时间研究了STM32定时器的最最基础的部分,把定时器最基础的两个功能实现了,余下的功能有待继续学习.首先有一点

Django 学习笔记(七)数据库基本操作(增查改删)

一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.py 5.同步数据 二.安装IPython方便debug sudo apt-get install ipython3 安装成功后用python manage.py shell 会自动进入Ipython交互解释器中,没有安装Ipython只有前两行代码,只进入到Python shell 中. Python 3.5

APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int kill(pid_t pid,int signo); int raise(int signo); Both return: 0 if OK,?1 on error kill向进程号为pid的进程发送signo信号 能够看出 以下两行代码是等价的: kill(getpid(), signo); raise(sig