【Cocos2dx 3.3 Lua】定时器事件
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轴位置:
|
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】定时器事件的更多相关文章
- (转载)【cocos2dx 3.x Lua] 注册事件函数详解
出处: http://www.2cto.com/kf/201409/338235.html coocs2dx 版本 3.1.1 registerScriptTouchHandler 注册触屏事件 re ...
- cocos2d-x lua 触摸事件
cocos2d-x lua 触摸事件 version: cocos2d-x 3.6 1.监听 function GameLayer:onEnter() local eventDispatcher = ...
- Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试)
Cocos2d-x 3.2 Lua演示样例 ClickAndMoveTest(点击移动測试) 本篇博客介绍Cocos2d-x 3.2Lua演示样例中点击移动的样例,在这个样例你能够得到怎样创建单点触 ...
- Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)
Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求) 本篇博客介绍Cocos2d-x 3.2Lua演示样例中的XMLHttpRequestTes ...
- Cocos2d-x 3.2 Lua演示样本CocosDenshionTest(音频测试)
Cocos2d-x 3.2 Lua演示样本CocosDenshionTest(音频测试) 本篇博客介绍Cocos2d-x 3.2中Lua演示样例的音频測试.Cocos2d-x使用SimpleAudi ...
- 【Cocos2dx 3.3 Lua】滚动字幕
参考资料: http://blog.csdn.net/jackystudio/article/details/12991977 1.原理 通过调用update来更新位置达到 ...
- 【Cocos2dx 3.x Lua】TileMap使用
1.编辑TileMap地图资源 2.Cocos2dx 3.x Lua中使用TileMap Link: http://codepad.org/P0nFP1Dx local TileMap=clas ...
- C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)
定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = new Timer(); aTimer ...
- Cocos2d-x 脚本语言Lua中的面向对象
Cocos2d-x 脚本语言Lua中的面向对象 面向对象不是针对某一门语言,而是一种思想.在面向过程的语言也能够使用面向对象的思想来进行编程. 在Lua中,并没有面向对象的概念存在,没有类的定义和子类 ...
随机推荐
- 【Python3】 使用django 2.0 + python3.6.4 创建应用
python版本:3.6.4 django版本:2.0 1 创建应用 输入命令 python manage.py startapp blog 2 在项目目录创建 templates文件夹 用于存放我们 ...
- 【cs229-Lecture10】特征选择
本节课要点: VC维: 模型选择算法 特征选择 vc维:个人还是不太理解.个人的感觉就是为核函数做理论依据,低维线性不可分时,映射到高维就可分,那么映射到多高呢?我把可分理解为“打散”. 参考的资料: ...
- Elasticsearch学习之深入聚合分析五---案例实战
1. fielddata核心原理 fielddata加载到内存的过程是lazy加载的,对一个analzyed field执行聚合时,才会加载,而且是field-level加载的,一个index的一个f ...
- git查看指令
打开git bash 1,查看自己之前是否生成过ssh密钥 $ ls .ssh 如果存在这个id_rsa.pub这个文件的话表示已经生成了 2,查看用户名和邮箱 $ git config --glob ...
- vue Element-UI组件
一.UI组件 目的: 提高开发效率, 别人提供好一切, 拿过来直接用饿了么团队开源一个基于vue组件库 Element-UI ==> pc端 文档: http://element-cn.elem ...
- RDMA卡的检测方法
1. udaddy This script covers RDMA_CM UD connections. (It establishes a set of unreliable RDMA datagr ...
- 解决 java.lang.IllegalThreadStateException: Thread already started. 错误
extends:http://blog.csdn.net/liuhanhan512/article/details/7575386 android开发中,对线程的操作比较悲催,start一个线程后,必 ...
- iOS - 去除数组中重复数据的几种方法
第一种:利用NSDictionary的AllKeys(AllValues)方法 代码: NSArray *dataArray = @[@"2018-02-01",@"20 ...
- iOS - Block产生Memory Leaks循环引用导致的内存泄漏以及解决方案
在ARC(自动引用技术)前,Objective-c都是手动来分配释放 释放 计数内存,其过程非常复杂. ARC技术推出后,貌似世界和平了很多,但是其实ARC并不等同于Java或者C#中的垃圾回收,AR ...
- 为自定义的View添加长按事件
以前开发画板组件时,要添加一个长按监听事件,这个画板实际上就是继承自View的一个自定义组件. 首先,设置好长按事件发生时要触发的操作: private class LongPressRunnable ...