• 【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=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执行一次定时函数,与控制台输出吻合

     

  • 相关阅读:
    Hive-拉链表
    JAVA-POI
    GreenPlum-数据存储目录迁移及常用操作
    CDH6 高版本hbase+solr实现二级索引
    GreenPlum执行gpfdist报错:libssl.so.1.0.0: cannot open shared object file: No such file or directory
    rasdaman介绍及安装
    博学谷-数据分析pandas
    博学谷-数据分析numpy
    博学谷-数据分析matplotlib
    python基础学习笔记
  • 原文地址:https://www.cnblogs.com/luosongchao/p/4339149.html
Copyright © 2020-2023  润新知