1. using System;
  2. using UnityEngine;
  3.  
  4. public enum ETimerType
  5. {
  6. CommonFormat, // 78 77 76 75 ...
  7. TimeFormat, //以时间格式显示倒计时
  8. }
  9.  
  10. //自定义时间
  11. public class CustomTime
  12. {
  13. public int Days, Hours, Minutes, Seconds;
  14.  
  15. public CustomTime(int seconds)
  16. {
  17. Days = seconds / ;
  18.  
  19. seconds = seconds - Days * ;
  20. Hours = seconds / ;
  21.  
  22. seconds = seconds - Hours * ;
  23. Minutes = seconds / ;
  24.  
  25. Seconds = seconds % ;
  26. }
  27.  
  28. public string GetTimeFormat()
  29. {
  30. string formatTime = "";
  31. if (Days > )
  32. {
  33. formatTime = string.Format("{0}天{1}:{2}:{3}", Days.ToString(), Hours.ToString("D2"), Minutes.ToString("D2"), Seconds.ToString("D2"));
  34. }
  35. else if (Hours > )
  36. {
  37. formatTime = string.Format("{0}:{1}:{2}", Hours.ToString("D2"), Minutes.ToString("D2"), Seconds.ToString("D2"));
  38. }
  39. else if (Minutes > )
  40. {
  41. formatTime = string.Format("{0}:{1}", Minutes.ToString("D2"), Seconds.ToString("D2"));
  42. }
  43. else if (Seconds > )
  44. {
  45. formatTime = string.Format("{0}", Seconds.ToString("D2"));
  46. }
  47. return formatTime;
  48. }
  49. }
  50.  
  51. [RequireComponent(typeof(UILabel))]
  52. public class LabelTimer : MonoBehaviour
  53. {
  54. public delegate void OnFinish();
  55. public event OnFinish EvFinish;
  56.  
  57. public int totalTime = ;
  58. public float interval = ;
  59.  
  60. ETimerType timerType = ETimerType.CommonFormat;
  61. UILabel mLabel = null;
  62.  
  63. void Start()
  64. {
  65. mLabel = GetComponent<UILabel>();
  66. }
  67.  
  68. void Update()
  69. {
  70. interval += Time.deltaTime;
  71. if (interval >= )
  72. {
  73. --totalTime;
  74. ShowTime();
  75. interval = ;
  76. }
  77.  
  78. if (totalTime <= )
  79. {
  80. enabled = false;
  81. gameObject.SetActive(false);
  82. if (null != EvFinish)
  83. EvFinish();
  84. }
  85. }
  86.  
  87. void ShowTime()
  88. {
  89. if (timerType == ETimerType.CommonFormat)
  90. {
  91. mLabel.text = totalTime.ToString();
  92. }
  93. else if (timerType == ETimerType.TimeFormat)
  94. {
  95. CustomTime ct = new CustomTime(totalTime);
  96. mLabel.text = ct.GetTimeFormat();
  97. }
  98. }
  99.  
  100. public void Stop()
  101. {
  102. gameObject.SetActive(false);
  103. totalTime = ;
  104. EvFinish = null;
  105. }
  106.  
  107. public bool TimeKeeping
  108. {
  109. get
  110. {
  111. return totalTime > ;
  112. }
  113. }
  114.  
  115. public void StartCountDown(int totalTime, ETimerType timerType)
  116. {
  117. this.timerType = timerType;
  118. if (null == mLabel)
  119. mLabel = GetComponent<UILabel>();
  120. this.totalTime = totalTime;
  121. interval = ;
  122. enabled = true;
  123. ShowTime();
  124. if (!gameObject.activeSelf)
  125. gameObject.SetActive(true);
  126. }
  127.  
  128. public static LabelTimer Begin(GameObject go, int totalTime, ETimerType timerType = ETimerType.CommonFormat)
  129. {
  130. LabelTimer lt = go.GetComponent<LabelTimer>();
  131. if (null == lt) lt = go.AddComponent<LabelTimer>();
  132. lt.StartCountDown(totalTime, timerType);
  133. return lt;
  134. }
  135. }

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. 1初识QT

    创建程序步骤: 打开Qt Creator 界面选择 New Project或者选择菜单栏 [文件]-[新建文件或项目]菜单项 弹出New Project对话框,选择Qt Widgets Applica ...

  2. python excel操作 练习:#生成一个excel文件,生成3个sheet,每个sheet的a1写一下sheet的名称。每个sheet有个底色

    练习:#生成一个excel文件,生成3个sheet,每个sheet的a1写一下sheet的名称.每个sheet有个底色 #coding=utf-8 from openpyxl import Workb ...

  3. RHEL6.4 字符模式下安装图形界面图文教程

    本文转自:http://www.cnblogs.com/wahsonleung/p/3230325.html 第1步:当然就是启动redhat,设置映像文件. 第2步:命令行输入yum groupin ...

  4. CSS前叙

    1 css是什么?层叠样式表,修饰网页结构2 如何去使用css?a.在html网页中,加入一个style标签,在这个style标签里面写css代码b.可以直接把style里面的代码放到一个单独的文件中 ...

  5. HttpClient配置SSL绕过https证书

    https://blog.csdn.net/irokay/article/details/78801307 HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的 ...

  6. php随笔10-thinkphp 3.1.3 模板继承 布局

    8.25 模板继承 模 板继承是3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层.模板继承其实并不难理解,就好比类 的继承一样,模板也可以定义一个 ...

  7. stm32 学习参考(转)

    源:stm32 学习参考 单片机裸机下写一个自己的shell调试器     LWIP_STM32_ENC28J60_NETCONN_TCP_SERVICER(5)     LWIP_STM32_ENC ...

  8. P2414 [NOI2011]阿狸的打字机

    P2414 [NOI2011]阿狸的打字机 AC自动机+树状数组 优质题解 <------题目分析 先AC自动机搞出Trie图 然后根据fail指针建一只新树 把树映射(拍扁)到一个序列上,用树 ...

  9. java项目报错: org.springframework.beans.factory.BeanCreationException找不到mapper.xml文件

    错误代码 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userSer ...

  10. 20145304 Exp4 恶意代码分析

    20145304 Exp4 恶意代码分析 实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控 ...