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. 云计算设计模式(二十三)——Throttling节流模式

    云计算设计模式(二十三)——Throttling节流模式 控制由应用程序使用,一个单独的租户或整个服务的一个实例的资源的消耗.这种模式可以允许系统继续运行并满足服务水平协议,即使当增加需求的资源放置一 ...

  2. 让A超链接无效的办法 阻止元素发生默认的行为

    $("a").click(function(event){ event.preventDefault(); }); event.preventDefault(); 方法阻止元素发生 ...

  3. javascript 原型世界浅析

    一. 无中生有 起初,什么都没有. 造物主说:没有东西本身也是一种东西啊,于是就有了null: 现在我们要造点儿东西出来.但是没有原料怎么办? 有一个声音说:不是有null嘛? 另一个声音说:可是nu ...

  4. Python并行编程的几个要点

    一.基于线程的并行编程 如何使用Python的线程模块 如何定义一个线程 如何探测一个线程 如何在一个子类中使用线程 Lock和RLock实现线程同步 信号实现线程同步 条件(condition)实现 ...

  5. 【咸鱼教程】protobuf在websocket通讯中的使用

    教程目录一 protobuf简介二 使用protobuf三 Demo下载 参考: CSDN:Egret项目中使用protobuf(protobufjs) TS项目中使用Protobuf的解决方案(ba ...

  6. undefined类型

    undefined类型 只有一个特殊的值 undefined   在使用var声明变量但未对其加以初始化,这个变量的值就是undefined 值是undefined的情况: 1.显示声明并初始化变量值 ...

  7. JS如何遍历Object中的所有属性?

    JS如何遍历Object中的所有属性? var params = ""; for(var i in baseParams){ params += "&" ...

  8. iOS - 友盟集成QQ分享的AppID转换16进制的方法

    设置xcode的url scheme格式为“QQ”+腾讯QQ互联应用appId转换成十六进制(不足8位前面补0),例如“QQ41EE2B54”.生成十六进制方法:echo 'ibase=10;obas ...

  9. 170822、解决PLSQL记录被另一个用户锁住的问题

    1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 或者用以下命令: select b. ...

  10. Css 中的 block,inline和inline-block概念和区别

    1.block和inline这两个概念是简略的说法,完整确切的说应该是 block-level elements (块级元素) 和 inline elements (内联元素).block元素通常被现 ...