Cocos2dx 3.x Lua 中使用定时器有两种方式:

(1)self:scheduleUpdateWithPriorityLua(update, priority)

> 参数一:刷新函数

> 参数二:刷新优先级

其中 self 为 Node类 的子类。

该方法默认为每帧都刷新一次,无法自定义刷新时间间隔。

(2)scheduler:scheduleScriptFunc(update, inteval, false)

> 参数一:刷新函数

> 参数二:每次刷新的时间间隔

> 参数三:是否只执行一次。false为无限次。

其中 scheduler 为定时器管理:cc.Director:getInstance():getScheduler()

推荐使用第二种方式,因为比较通用。

 

1.1 使用scheduleUpdateWithPriorityLua函数:

Link: http://codepad.org/xAJnPP88    [ raw code | fork ]

SpriteZOrderWithFrameCall=class("SpriteZOrderWithFrameCall",function()
return cc.Sprite:create()
end) SpriteZOrderWithFrameCall.ctor=function(self)
self.zorder= local size=cc.Director:getInstance():getWinSize()
self:setPosition(size.width/,size.height/)
self:setScaleX()
end SpriteZOrderWithFrameCall.init=function(self,texture)
self:setTexture(texture)
self:setLocalZOrder(self.zorder)
self:scheduleUpdateWithPriorityLua(function(dt)
self:schedule()
end,)
end SpriteZOrderWithFrameCall.schedule=function(self)
cclog("<SpriteZOrderWithFrameCall.schedule>")
local function reorderSprite()
cclog("call <reorderSprite>"..os.clock())
local order=self:getLocalZOrder()
if order < - then
self.zorder=
elseif order > then
self.zorder=-
end
self.zorder=self.zorder+
self:setLocalZOrder(self.zorder)
end
reorderSprite()
end SpriteZOrderWithFrameCall.create=function(self)
local sprite=self.new()
sprite:init("Images/grossini.png")
return sprite
end return SpriteZOrderWithFrameCall

观察输出如下:

    

控制台输出:  

根据图所示,scheduleUpdateWithPriorityLua 每帧都会调用,运行时帧率为60FPS/1s 也就是执行一帧的时间为0.017s与控制台输出时间吻合

 

1.2 使用scheduler:scheduleScriptFunc(update,interval,false)的实例如下:

定时调整精灵Z轴位置:

Link: http://codepad.org/HrpW9Cf9    [ raw code | fork ]
SpriteZOrder=class("SpriteZOrder",function()
return cc.Sprite:create()
end) SpriteZOrder.ctor=function(self)
self.zorder= local size=cc.Director:getInstance():getWinSize()
self:setPosition(size.width/,size.height/)
self:setScaleX()
end SpriteZOrder.init=function(self,texture)
self:setTexture(texture)
self:setLocalZOrder(self.zorder)
self:registerScriptHandler(function(tag)
local scheduler=nil
if tag=="enter" then
scheduler=self:onEnter()
elseif tag=="exit" then
self:onExit(scheduler)
end
end)
end SpriteZOrder.onEnter=function(self)
cclog("<SpriteZOrder.onEnter>")
local function reorderSprite()
cclog("call <reorderSprite>"..os.clock())
local order=self:getLocalZOrder()
if order < - then
self.zorder=
elseif order > then
self.zorder=-
end
self.zorder=self.zorder+
self:setLocalZOrder(self.zorder)
end local scheduler=cc.Director:getInstance():getScheduler()
scheduler:scheduleScriptFunc(reorderSprite,,false)
return scheduler
end SpriteZOrder.onExit=function(self,scheduler)
cclog("<SpriteZOrder.onExit>")
if scheduler then
cc.Director:getInstance():getScheduler():unscheduleScriptEntry(scheduler)
end
end SpriteZOrder.create=function(self)
local sprite=self.new()
sprite:init("Images/grossini.png")
return sprite
end return SpriteZOrder

观察输出如下:

控制台输出:


scheduleScriptFunc可以设置定时时间,这里设置2s执行一次定时函数,与控制台输出吻合

 

【Cocos2dx 3.3 Lua】定时器事件的更多相关文章

  1. (转载)【cocos2dx 3.x Lua] 注册事件函数详解

    出处: http://www.2cto.com/kf/201409/338235.html coocs2dx 版本 3.1.1 registerScriptTouchHandler 注册触屏事件 re ...

  2. cocos2d-x lua 触摸事件

    cocos2d-x lua 触摸事件 version: cocos2d-x 3.6 1.监听 function GameLayer:onEnter() local eventDispatcher = ...

  3. Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)

    Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)  本篇博客介绍Cocos2d-x 3.2Lua演示样例中点击移动的样例,在这个样例你能够得到怎样创建单点触 ...

  4. Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)

    Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)     本篇博客介绍Cocos2d-x 3.2Lua演示样例中的XMLHttpRequestTes ...

  5. Cocos2d-x 3.2 Lua演示样本CocosDenshionTest(音频测试)

    Cocos2d-x 3.2 Lua演示样本CocosDenshionTest(音频测试)  本篇博客介绍Cocos2d-x 3.2中Lua演示样例的音频測试.Cocos2d-x使用SimpleAudi ...

  6. 【Cocos2dx 3.3 Lua】滚动字幕

    参考资料:     http://blog.csdn.net/jackystudio/article/details/12991977   1.原理         通过调用update来更新位置达到 ...

  7. 【Cocos2dx 3.x Lua】TileMap使用

    1.编辑TileMap地图资源 2.Cocos2dx 3.x Lua中使用TileMap   Link: http://codepad.org/P0nFP1Dx  local TileMap=clas ...

  8. C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)

    定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = new Timer(); aTimer ...

  9. Cocos2d-x 脚本语言Lua中的面向对象

    Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...

随机推荐

  1. 【cs229-Lecture7】支持向量机(SVM)

    SVM不错的学习资料: 百度网盘链接: http://pan.baidu.com/s/1hqw0Rnm 密码: asec blog:http://www.blogjava.net/zhenandaci ...

  2. Makefile中的MAKECMDGOALS

      make 在执行时会设置一个特殊变量 -- "MAKECMDGOALS" ,该变量记录了命令行参数指定的终极目标列表,没有通过参数指定终极目标时此变量为空.该变量仅限于用在特殊 ...

  3. 一起脱去小程序的外套和内衣 - 微信小程序架构解析

    版权声明:本文由渠宏伟  原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/760767001484042227 来源:腾云阁 ...

  4. Metaspolit使用简介

    信息收集阶段 Whois信息收集 msf auxiliary > whois baidu.com 域名信息查询阶段 msf auxiliary > nslookup www.baidu.c ...

  5. C语言位操作--判断两整数是否异号

    判断两整数是否异号: int x, y; //输入比较的两数 bool f = ((x ^ y) < 0); // 返回真,当且仅当x与y异号 说明:当x.y异号,x与y的最高位分别为0和1,取 ...

  6. 【LOJ6077】「2017 山东一轮集训 Day7」逆序对 生成函数+组合数+DP

    [LOJ6077]「2017 山东一轮集训 Day7」逆序对 题目描述 给定 n,k ,请求出长度为 n的逆序对数恰好为 k 的排列的个数.答案对 109+7 取模. 对于一个长度为 n 的排列 p ...

  7. 关于Jmeter3.0,你必须要知道的5点变化

    2016.5.18日,Apache 发布了jmeter 3.0版本,本人第一时间上去查看并下载使用了,然后群里或同事都会问有什么样变化呢?正好在网上看到一遍关于3.0的文章,但是是英文的.这里翻译一下 ...

  8. SSH教程从零打造在线网盘系统前言&目录

    本系列教程内容提要 本系列教程是一个学习教程,是关于Java工程师的SSH(Struts2+Spring+Hibernate)系列教程,本教程将会分为四个部分和大家一同打造一个在线网盘系统,由于教程是 ...

  9. PAT天梯赛L2-003 月饼【贪心】

    L2-003. 月饼 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不 ...

  10. opengl导入obj模型

    在经过查阅各种资料以及各种bug之后,终于成功的实现了导入基本的obj模型. 首相介绍一下什么是obj模型 一.什么是OBJ模型 obj文件实际上是一个文本文档,主要有以下数据,一般可以通过blend ...