感觉cocos的定时器不好用,自已封装了一个



--******************************************************************
-- 文件名:    TimerTgr.lu
-- 版 权:    (C) 从这里开始
-- 创建人:    陈泽丹
-- 日 期:    2014-10-26 14:12
-- 版 本:    1.0
-- 描 述:    
--************************** 修改记录 ******************************
-- 修改人:
-- 日 期:
-- 描 述:
--******************************************************************



-- 定时器
function TimerBuf()
    local public, protected = {},{}
    public = public or {}
    protected = protected or {}
    local private = {}

    --------------------------------------------------------------------
    -- public:
    -- 运行
    function public:create( _times, _debugInfo )
        private.times = _times
        protected.debugInfo = _debugInfo
    end

    -- 释放
    function public:release()
        if public:isRun() then
            public:stop()
        end
    end

    -- 开启
    function public:start()
        if public:isRun() then
            public:stop()
        end
        local function onTime()
            self:onTime()
        end
        private.tgr = cc.Director:getInstance():getScheduler():scheduleScriptFunc(onTime, private.times, false)
        return true
    end

    -- 结束
    function public:stop()
        if public:isRun() then
            cc.Director:getInstance():getScheduler():unscheduleScriptEntry( private.tgr )
            private.tgr = nil
        end
    end

    -- 是否进行中
    function public:isRun()
        if nil == private.tgr then 
            return false
        end
        return true
    end

    -- 回调
    function public:onTime( ... )
        cclog( "TimerBuf:onTime is nil" )
    end

    --------------------------------------------------------------------
    return public
end



-- 定时器
function TimerExBuf()
    local public, protected = {},{}
    public = public or {}
    protected = protected or {}
    local private = 
    {
        intervalTimer   = TimerBuf(),
        timesTimer      = TimerBuf(),
    }

    --------------------------------------------------------------------
    -- public:
    -- 运行
    function public:create( _interval, _times, _debugInfo )
        protected.debugInfo = _debugInfo
        private.intervalTimer:create( _interval, _debugInfo )
        private.timesTimer:create( _times, _debugInfo )
        function private.intervalTimer:onTime()
            private.timesTimer:start()
            private.intervalTimer:stop()
        end
        function private.timesTimer:onTime()
            public:onTime()
        end
    end

    -- 释放
    function public:release()
        if public:isRun() then
            public:stop()
        end
    end

    -- 开启
    function public:start()
        if public:isRun() then
            public:stop()
        end
        private.intervalTimer:start()
        return true
    end

    -- 结束
    function public:stop()
        if private.intervalTimer:isRun() then
            private.intervalTimer:stop()
        end
        if private.timesTimer:isRun() then
            private.timesTimer:stop()
        end
    end
        
    -- 是否进行中
    function public:isRun()
        if private.intervalTimer:isRun() then
            return true
        end
        if private.timesTimer:isRun() then
            return true
        end
        return false
    end


    -- 回调
    function public:onTime( ... )
        cclog( "TimerExBuf:onTime is nil" )
    end

    --------------------------------------------------------------------
    return public
end




使用

local timerBuf = TimerExBuf()
function timerBuf:onTime()
    cclog("timerBuf:onTime")
    timerBuf:stop()
end
timerBuf:create( 3, 0.5, "test" )
timerBuf:start()

不好用点:
1, cocos的定时器,没有廷时开启的参数。
2, 要记录触发器ID
3, 创建和删除必是同一个结点, 这个结点还要在代码里去编码实现,还要码农们去记得成对增删。。。
3, 用起来语法罗索。

lua中定时器确实有点麻烦