新宝娱乐城信誉打不开: 志远 大话链式编程之定时器Timer(四)

194
回复
5917
查看
打印 上一主题 下一主题
  [ 复制链接 ]
排名
9397
昨日变化

新宝娱乐城博彩打不开 www.sl6cl.com.cn 12

主题

207

帖子

964

积分

Rank: 9Rank: 9Rank: 9

UID
21402
好友
12
蛮牛币
91
威望
0
注册时间
2014-4-14
在线时间
464 小时
最后登录
2019-5-24

认证开发者

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 zhiyuan 于 2018-7-18 13:49 编辑

0x00前言

链式编程思想的Unity组件改造还有几章待续,但今天小编准备来点插曲---教教大家基于链式编程的Unity通用定时器:Timer
诚然,前面3章的学习,我们已然看到它给Unity组件扩展带来的进步,一不小心,还修复了VideoPlayer事件不咋灵验的BUG。
下面呢,我们来看看如何将一个Unity常用的延时需求封装成一个定时器,还“咔咔地”给他也整出个链式风格来。
风格如下:


0x01背景
定时器在Unity中的需求较为常见,譬如:
  • 点击一个按钮,几秒钟后搞事情
  • 点击一个按钮,开始计时or倒计时
  • 给你一个总时间,并在每个时间节点到来的时候搞个事情
  • 其他扩展,比如给WWW类扩展一个链接超时检测(也叫看门狗?)
有鉴于时常疲于写延时逻辑呀,笔者便有了一个封装定时器的小小想法。下面,先谈谈常见的定时器的写法:
实现形式 简述
Update(){...} 每帧减去 Time.deltaTime 设定时间小于0时搞事情
IEnumerator Delay(){...} yield return time即
Invoke(methodName, time) 见API,提供要执行的方法和延迟时长即可

这里,笔者采用了第一种方案进行的封装,但时间的累加或递减并不是用Time.deltaTime,而是选择了另一个方案,也是便于为定时器加入TimeScale功能。

0x02实现

这个定时器由3个类,2个事件链,一个Timer组,诸多重载方法与静态方法 组成:
其中3个类:
Timer: 定时器核心类,负责实现定时器的运算逻辑和事件分发,同时面向用户公开操作定时器的API
TimerDriver: 驱动类,Timer一旦被添加自动生成,使用MonoBehavior的Update生命周期函数驱动我们所有的定时器。
TimerExtend:静态类,扩展方法所在,
2个事件链:
Action<float> UpdateEvent; //每帧会响应
Action EndEvent;                //定时结束响应  

因为脚本长达500多行,小编就简单的梳理一下流程和大纲(源码寄存在GitHub上,见文章末尾):
1. 先声明一个Timer类,此时笔者已经决定使用Itween的理念一个脚本完成自身所有功能的管理,声明一个list先,安排!其实后面的所有逻辑就都对这个列表的操作了,(增删改查+遍历刷新)。

2. 得到定时的开始时间,好处可以选择是否用到Timescale:

3. 添加事件链,笔者用了一对Action委托完成了事件链的添加:

4. 围绕事件链,完成对其增(图一)、删(图二)操作



5. 静态方法,为用户隐式创建Timer实例和Timer驱动(配合单例模式),简化使用流程,用户只需处理业务逻辑其他不用操心。




6. 方法扩展+委托参数=实现链式编程


7. 立下Flag,来日好相认:主动权移交用户手上便于用户点对点交互。


8. 方法重载,实现更多方式与定时器交互
哪些方法要重载?
移除Timer,对,移除Timer,我们可以通过flag移除,也可以通过timer实例移除,亦可以通过注册的事件来移除

备注:
形如这样的代码可简化成下面的样子,去掉小括号,去掉return:
[C#] 纯文本查看 复制代码
                if (!Array.Exists(delegates, (v) => { return v == (Delegate)updateEvent; }))
                {
                    UpdateEvent += updateEvent;
                }



[C#] 纯文本查看 复制代码
if (!Array.Exists(delegates, v=>  v == (Delegate)updateEvent ))
                {
                    UpdateEvent += updateEvent;
                }




0x03示例


1.下面的示例演示了:Update事件和OnCompleted事件。
“    嗯?就截图里面几句代码,还有多的不?”  “对不起,还真就没有~”
   


时间好像有点错开了,呃,函数用错了吧,用 Mathf.FloorToInt 就好啦~~

2.  简单流程控制,实现在哪个节点(秒)执行什么事情--------省略了,为啥,因为上面的示例里面,加个if else就成,毕竟你每秒都能拿到,哪个节点(哪一秒)搞事情还不得是你说了算?


3.  WWW 的简单扩展,WWW下载的超时检测 (开脑洞)



网络好没办法,设定为0.5秒也很难得到超时报错,怪我咯
0X04总结


因为链式编程思想的融入,小编的实际使用中来看呀,这个Timer真的太实惠了。
直接嵌入代码为俺带来延迟操作但又丝毫未打乱俺的思绪,还带来了闭包的好处。
闭包的坏处?嘿嘿嘿,小编表示本文不做探讨~

0X05扩展阅读

使用链式编程思想的Timer Trigger - 简书 https://www.jianshu.com/p/c79bcf446684
Unity3D 中的定时器 - Easily - 博客园 https://www.cnblogs.com/yili16438/p/3749066.html
通用工具类之定时触发器 - 草帽领 - 博客园 https://www.cnblogs.com/CaomaoUnity3d/p/4940655.html
浅谈Unity3D中的Coroutine及其使用(延时、定时调用函数) - CSDN博客 https://blog.csdn.net/nizihabi/article/details/47606887


写到最后,本文Timer的源代码和Demo回复可见:
游客,如果您要查看本帖隐藏内容请回复














排名
9397
昨日变化

12

主题

207

帖子

964

积分

Rank: 9Rank: 9Rank: 9

UID
21402
好友
12
蛮牛币
91
威望
0
注册时间
2014-4-14
在线时间
464 小时
最后登录
2019-5-24

认证开发者

来自 2#
楼主 2018-8-7 17:03:54 只看该作者
zhiyuan 发表于 2018-8-7 17:03
最近项目比较忙 ,先暂更几天,抱歉抱歉 有项目的任何问题联系本人QQ 1258586900,有时间会帮忙解决  ...

也可以加蛮牛群 539178957
3偶尔光临
273/300
排名
12303
昨日变化

0

主题

81

帖子

273

积分

Rank: 3Rank: 3Rank: 3

UID
2927
好友
0
蛮牛币
11
威望
0
注册时间
2013-8-31
在线时间
117 小时
最后登录
2018-7-25
板凳
2018-7-17 19:11:12 只看该作者
如果您要查看本帖隐藏内容请
6蛮牛粉丝
1045/1500
排名
4092
昨日变化

0

主题

461

帖子

1045

积分

Rank: 6Rank: 6Rank: 6

UID
266294
好友
1
蛮牛币
159
威望
0
注册时间
2018-1-25
在线时间
222 小时
最后登录
2019-5-20
地板
2018-7-17 19:30:21 只看该作者
thanks for the share!
3偶尔光临
262/300
排名
10112
昨日变化

0

主题

73

帖子

262

积分

Rank: 3Rank: 3Rank: 3

UID
191422
好友
0
蛮牛币
467
威望
0
注册时间
2016-12-12
在线时间
82 小时
最后登录
2019-5-9
5#
2018-7-17 20:47:50 只看该作者
这个Timer真的太实惠了。
4四处流浪
438/500
排名
8243
昨日变化

0

主题

225

帖子

438

积分

Rank: 4

UID
281167
好友
1
蛮牛币
883
威望
0
注册时间
2018-5-14
在线时间
65 小时
最后登录
2018-12-10
6#
2018-7-17 21:08:36 只看该作者
很好很轻大,感谢分享,支持一下
6蛮牛粉丝
1387/1500
排名
1677
昨日变化

0

主题

110

帖子

1387

积分

Rank: 6Rank: 6Rank: 6

UID
23042
好友
0
蛮牛币
3004
威望
0
注册时间
2014-4-27
在线时间
501 小时
最后登录
2019-4-21
7#
2018-7-17 21:27:30 只看该作者
写到最后,本文Timer的源代码隐藏可见
6蛮牛粉丝
1493/1500
排名
1453
昨日变化

0

主题

96

帖子

1493

积分

Rank: 6Rank: 6Rank: 6

UID
49519
好友
1
蛮牛币
3406
威望
0
注册时间
2014-10-17
在线时间
531 小时
最后登录
2019-5-24
8#
2018-7-17 22:44:08 只看该作者
666666666666666666666
6蛮牛粉丝
1493/1500
排名
1453
昨日变化

0

主题

96

帖子

1493

积分

Rank: 6Rank: 6Rank: 6

UID
49519
好友
1
蛮牛币
3406
威望
0
注册时间
2014-10-17
在线时间
531 小时
最后登录
2019-5-24
9#
2018-7-17 23:03:24 只看该作者
要是小编能把demo弄出来就最好了
排名
2714
昨日变化

12

主题

130

帖子

1202

积分

Rank: 9Rank: 9Rank: 9

UID
251813
好友
4
蛮牛币
2175
威望
0
注册时间
2017-10-31
在线时间
504 小时
最后登录
2019-5-25

专栏作家活力之星

10#
2018-7-18 07:32:28 只看该作者
下载下来简单了解下。
6蛮牛粉丝
1061/1500
排名
2236
昨日变化

1

主题

156

帖子

1061

积分

Rank: 6Rank: 6Rank: 6

UID
232255
好友
1
蛮牛币
1455
威望
0
注册时间
2017-7-15
在线时间
276 小时
最后登录
2019-5-24
11#
2018-7-18 08:13:34 只看该作者
如果您要查看本帖隐藏内容请
7日久生情
2461/5000
排名
970
昨日变化

2

主题

855

帖子

2461

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
206337
好友
4
蛮牛币
15085
威望
0
注册时间
2017-6-5
在线时间
516 小时
最后登录
2019-5-25
12#
2018-7-18 08:26:37 只看该作者
膜拜大佬
6蛮牛粉丝
1098/1500
排名
1677
昨日变化

0

主题

61

帖子

1098

积分

Rank: 6Rank: 6Rank: 6

UID
165111
好友
0
蛮牛币
2309
威望
0
注册时间
2016-8-31
在线时间
261 小时
最后登录
2019-5-24
13#
2018-7-18 08:49:44 只看该作者
666666666666666
3偶尔光临
248/300
排名
11230
昨日变化

6

主题

48

帖子

248

积分

Rank: 3Rank: 3Rank: 3

UID
280327
好友
3
蛮牛币
158
威望
0
注册时间
2018-5-8
在线时间
104 小时
最后登录
2019-5-23
14#
2018-7-18 08:50:19 只看该作者
thanks for the share!
5熟悉之中
887/1000
排名
2492
昨日变化

0

主题

50

帖子

887

积分

Rank: 5Rank: 5

UID
233767
好友
0
蛮牛币
971
威望
0
注册时间
2017-7-23
在线时间
261 小时
最后登录
2019-4-16
15#
2018-7-18 09:00:32 只看该作者
6666666666666666
7日久生情
2022/5000
排名
1896
昨日变化

41

主题

741

帖子

2022

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
214924
好友
4
蛮牛币
18298
威望
0
注册时间
2017-3-28
在线时间
524 小时
最后登录
2019-5-22
16#
2018-7-18 09:01:40 只看该作者
666666666666666666666666
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

  • 赵孟頫:书法大师是怎么炼成的? 2019-05-26
  • 环境保护腰杆硬起来(在习近平新时代中国特色社会主义思想指引下——新时代新作为新篇章) 2019-05-26
  • 阳泉市旅发委对全市挂牌督办建设项目进行督导 2019-05-25
  • 苹果-热门标签-华商生活 2019-05-25
  • 图片故事:人民日报编辑部的一天 2019-05-24
  • 人民日报评论员:共创中华民族伟大复兴的美好未来 2019-05-24
  • 女性之声——全国妇联 2019-05-23
  • 中国智能手机在东南亚受追捧 2019-05-22
  • 一语惊坛(5月10日):半岛和平,是中朝两国的共同愿望。 2019-05-22
  • 董卿白岩松朱广权 看看央视主持人大学就读啥院系 2019-05-21
  • 邓超陈冠希焦恩俊,刷新娱乐圈女儿奴新高度 2019-05-21
  • 紫光阁中共中央国家机关工作委员会 2019-05-20
  • 四个跌停后 金洲慈航不惜食言也要选择如此停牌自救 2019-05-19
  • 无论是否想怀孕 这串数字女性要知道 2019-05-18
  • 机遇与挑战并存 中国企业“走出去”行稳致远 2019-05-17
  • 174| 975| 859| 699| 489| 856| 380| 993| 718| 334|