using System;
using UnityEngine; public enum ETimerType
{
CommonFormat, // 78 77 76 75 ...
TimeFormat, //以时间格式显示倒计时
} //自定义时间
public class CustomTime
{
public int Days, Hours, Minutes, Seconds; public CustomTime(int seconds)
{
Days = seconds / ; seconds = seconds - Days * ;
Hours = seconds / ; seconds = seconds - Hours * ;
Minutes = seconds / ; Seconds = seconds % ;
} public string GetTimeFormat()
{
string formatTime = "";
if (Days > )
{
formatTime = string.Format("{0}天{1}:{2}:{3}", Days.ToString(), Hours.ToString("D2"), Minutes.ToString("D2"), Seconds.ToString("D2"));
}
else if (Hours > )
{
formatTime = string.Format("{0}:{1}:{2}", Hours.ToString("D2"), Minutes.ToString("D2"), Seconds.ToString("D2"));
}
else if (Minutes > )
{
formatTime = string.Format("{0}:{1}", Minutes.ToString("D2"), Seconds.ToString("D2"));
}
else if (Seconds > )
{
formatTime = string.Format("{0}", Seconds.ToString("D2"));
}
return formatTime;
}
} [RequireComponent(typeof(UILabel))]
public class LabelTimer : MonoBehaviour
{
public delegate void OnFinish();
public event OnFinish EvFinish; public int totalTime = ;
public float interval = ; ETimerType timerType = ETimerType.CommonFormat;
UILabel mLabel = null; void Start()
{
mLabel = GetComponent<UILabel>();
} void Update()
{
interval += Time.deltaTime;
if (interval >= )
{
--totalTime;
ShowTime();
interval = ;
} if (totalTime <= )
{
enabled = false;
gameObject.SetActive(false);
if (null != EvFinish)
EvFinish();
}
} void ShowTime()
{
if (timerType == ETimerType.CommonFormat)
{
mLabel.text = totalTime.ToString();
}
else if (timerType == ETimerType.TimeFormat)
{
CustomTime ct = new CustomTime(totalTime);
mLabel.text = ct.GetTimeFormat();
}
} public void Stop()
{
gameObject.SetActive(false);
totalTime = ;
EvFinish = null;
} public bool TimeKeeping
{
get
{
return totalTime > ;
}
} public void StartCountDown(int totalTime, ETimerType timerType)
{
this.timerType = timerType;
if (null == mLabel)
mLabel = GetComponent<UILabel>();
this.totalTime = totalTime;
interval = ;
enabled = true;
ShowTime();
if (!gameObject.activeSelf)
gameObject.SetActive(true);
} public static LabelTimer Begin(GameObject go, int totalTime, ETimerType timerType = ETimerType.CommonFormat)
{
LabelTimer lt = go.GetComponent<LabelTimer>();
if (null == lt) lt = go.AddComponent<LabelTimer>();
lt.StartCountDown(totalTime, timerType);
return lt;
}
}

NGUI实现简单的倒计时组件的更多相关文章

  1. Vue2.0进阶组件 短信倒计时组件

    原本我想隔个几天再发文章,刚好今天项目上线,环境有问题,导致只有干等,刚好要为公司打造一套属于公司自己的一系列功能组件,这个使命就交给我了,大家也一直叫我来点干货,说实话我只是一个湿货,肚子里干一点就 ...

  2. Vue3语法快速入门以及写一个倒计时组件

    Vue3写一个倒计时组件 vue3 beta版本发布已有一段时间了,文档也大概看了一下,不过对于学一门技术,最好的方法还是实战,于是找了一个比较简单的组件用vue3来实现,参考的是vant的count ...

  3. JavaScript学习笔记-简单的倒计时跳转页面

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. setbuffer和freopen做一个简单的日志组件

    目标场景是这样的: 多线程的应用程序要频繁打一些小字节的日志,也不想引用很重的日志库. 设想了一个极其简单的日志组件,main线程中重定向stdout到文件,同时setbuffer设置一个10k的缓冲 ...

  5. [.Net Core] 在 Mvc 中简单使用日志组件

    在 Mvc 中简单使用日志组件 基于 .Net Core 2.0,本文只是蜻蜓点水,并非深入浅出. 目录 使用内置的日志组件 简单过渡到第三方组件 - NLog 使用内置的日志 下面使用控制器 Hom ...

  6. React Native之倒计时组件的实现(ios android)

    React Native之倒计时组件的实现(ios android) 一,需求分析 1,app需实现类似于淘宝的活动倒计时,并在倒计时结束时,活动也结束. 2,实现订单倒计时,并在倒计时结束时,订单关 ...

  7. 微信小程序倒计时组件开发

    今天给大家带来微信小程序倒计时组件具体开发步骤: 先来看下最终效果: git源:http://git.oschina.net/dotton/CountDown 分步骤-性子急的朋友,可以直接看最后那段 ...

  8. JS简单的倒计时(代码优化)

    倒计时网上一大堆,所以也没有什么好说的,支持:1.年,月,日,天,时分秒等倒计时. JS代码如下: /* * js简单的倒计时 * @param {date,obj} 日期 对象格式 */ funct ...

  9. 演练:使用VS2010 C# 创作简单的多线程组件

    BackgroundWorker 组件取代了 System.Threading 命名空间并添加了功能:但是,可以选择保留 System.Threading 命名空间以实现向后兼容并供将来使用.有关更多 ...

随机推荐

  1. 用liferay实现的增删改查例子-book管理系统

    liferay 这个框架是一个开源的项目,大家可以修改源代码,来实现自己的需求.但是关于liferay的开发资料中文的很少关于liferay的基础知识,大家可以百度学习一下,再来看下边的例子 首先需要 ...

  2. Verilog篇(三)仿真原理

    首先引入一个例子: `timescale  1ns/100ps module   TB;                                                         ...

  3. zw版【转发·台湾nvp系列Delphi例程】HALCON MirrorImage

    zw版[转发·台湾nvp系列Delphi例程]HALCON MirrorImage procedure TForm1.Button1Click(Sender: TObject);var img, im ...

  4. Manacher 计算最长回文串

    转自 http://blog.sina.com.cn/s/blog_3fe961ae0101iwc2.html 寻找字符串中的回文,有特定的算法来解决,也是本文的主题:Manacher算法,其时间复杂 ...

  5. centos 网卡名称修改

    在centos6.4之前,如果6.2,6.3安装后网卡名称都是em开始,如果想用eth0这种名称,或者是自定义名称,可以参照以下来实施. 第一步:修改/boot/grub/grub.conf增加一个 ...

  6. Javascript 判断对象是否相等

    在Javascript中相等运算包括"==","==="全等,两者不同之处,不必多数,本篇文章我们将来讲述如何判断两个对象是否相等? 你可能会认为,如果两个对象 ...

  7. c++性能之map实现性能比较

    http://www.cnblogs.com/zhjh256/p/6346501.html讲述了基本的map操作,在测试的时候,发现map的性能极为低下,与java相比相差了接近200倍.测试的逻辑如 ...

  8. java反射之-性能优化

    在最近的计划中,打算看看在不使用google protobuf的情况下,在原有的采用jackson作为json序列化工具的基础上,是否可以实现进一步的性能优化.主要是针对list的情况. 测试的时候选 ...

  9. AJAX 与 Python 后台通信

    Ajax 简介 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术. Ajax = 异步 ...

  10. kubernetes extension point

    以下大部分来自于k8s document, 笔者只是总结归纳, 解释不足的地方请参阅相关文档 Intention Non-sustainable way to customize Kubernetes ...