• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【Cocos2dx 3.3 Lua】定时器事件

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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=1

    local size=cc.Director:getInstance():getWinSize()
    self:setPosition(size.width/2,size.height/2)
    self:setScaleX(12)
end

SpriteZOrderWithFrameCall.init=function(self,texture)
    self:setTexture(texture)
    self:setLocalZOrder(self.zorder)
    self:scheduleUpdateWithPriorityLua(function(dt)
        self:schedule()
    end,0)
end

SpriteZOrderWithFrameCall.schedule=function(self)
    cclog("<SpriteZOrderWithFrameCall.schedule>")
    local function reorderSprite()
        cclog("call <reorderSprite>"..os.clock())
        local order=self:getLocalZOrder()
        if order < -1 then
            self.zorder=1
        elseif order >10 then
            self.zorder=-1
        end
        self.zorder=self.zorder+3
        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=1

    local size=cc.Director:getInstance():getWinSize()
    self:setPosition(size.width/2,size.height/2)
    self:setScaleX(12)
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 < -1 then
            self.zorder=1
        elseif order >10 then
            self.zorder=-1
        end
        self.zorder=self.zorder+3
        self:setLocalZOrder(self.zorder)
    end

    local scheduler=cc.Director:getInstance():getScheduler()
    scheduler:scheduleScriptFunc(reorderSprite,2,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执行一次定时函数,与控制台输出吻合

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
java:org.luaj.vm2.LuaError:XXXmodulenotfoundlua脚本初始化出错发布时间:2022-07-22
下一篇:
Lua中的控制结构发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap