游戏蛮牛学习群(纯技术交流,不闲聊):159852603
游戏蛮牛 手机端
开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

首页   >   博客   >   UnityTerminator

游戏框架-计时管理器 热度 4

个人分类: MMO游戏设计框架 | 2018-7-5 11:00
标签:计时器
1 个评论 | 阅读 248 | 收藏 | 举报

[code]csharpcode:

using System;
using System.Collections.Generic;
using UnityEngine;

public class Timer
{
    /// <summary>
    /// 延迟时间
    /// </summary>
    private float _delayTime;
    /// <summary>
    /// 已经过去的时间
    /// </summary>
    private float _elapsedTime;
    /// <summary>
    /// 延迟事件
    /// </summary>
    private Action _action;
    /// <summary>
    /// 是否循环
    /// </summary>
    private bool _repeat;
    private bool _end;
    public bool end { get { return _end; } }

    public Timer(float delay, Action action, bool repeat = false)
    {
        _delayTime = delay;
        _action = action;
        _repeat = repeat;
    }

    /// <summary>
    /// 更新
    /// </summary>
    /// <param name="dt">Time.deltaTime</param>
    public void Update(float dt)
    {
        _elapsedTime += dt;

        if (_elapsedTime >= _delayTime)
        {
            if (_repeat)
            {
                _elapsedTime = _elapsedTime - _delayTime;
                _action();
            }
            else
            {
                _action();
                _end = true;
            }
        }
    }
}
/// <summary>
/// 计时器管理器
/// </summary>
public class TimerManager : Singleton<TimerManager>
{
    private List<Timer> _timers = new List<Timer>();

    /// <summary>
    /// 延迟执行程序
    /// </summary>
    /// <param name="delay">延迟时间</param>
    /// <param name="action">延迟事件</param>
    /// <param name="repeat">是否循环</param>
    public void Invoke(float delay,Action action,bool repeat = false)
    {
        _timers.Add(new Timer(delay, action, repeat));
    }

    /// <summary>
    /// 更新
    /// </summary>
    /// <param name="dt"></param>
    public void Update(float dt)
    {
        for (int i = 0; i < _timers.Count; i++)
        {
            Timer timer = _timers[i];
            if (timer.end)
            {
                _timers.Remove(timer);
            }
            else
            {
                timer.Update(dt);
            }
        }
    }

    /// <summary>
    /// 清除计时器容器
    /// </summary>
    public void Clear()
    {
        _timers.Clear();
    }
}

3 0

评论 (1 个评论)

回复 欧先生- 2018-7-12 11:18
请问继承的这个 Singleton<TimerManager>是从哪里出来的
回复 骑着鸽子撞飞机 2018-9-4 18:32
欧先生-: 请问继承的这个 Singleton<TimerManager>是从哪里出来的
写一个单例继承Monobehaiver就行了,这种我写过

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册帐号

个人分类

标签

阅读排行

评论排行

推荐博客

最新博客

关闭

站长推荐 上一条 /1 下一条

返回顶部