游戏蛮牛学习群(纯技术交流,不闲聊):539178957
新宝娱乐城博彩打不开 手机端
开发者专栏

关注:2263

当前位置:新宝娱乐城博彩打不开 技术专区 开发者专栏

__________________________________________________________________________________
开发者干货区版块规则:

  1、文章必须是图文形式。(至少2幅图)
      2、文章字数必须保持在1500字节以上。(编辑器右下角有字数检查)
      3、本版块只支持在游戏蛮牛原创首发,不支持转载。
      4、本版块回复不得无意义,如:顶、呵呵、不错......【真的会扣分的哦】
      5、......
__________________________________________________________________________________
查看: 1322|回复: 133
发新帖

新宝娱乐: [志远] 大话链式编程之定时器Timer(四)

  [复制链接]  [移动端链接]
排名
9513
昨日变化
2

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

主题

138

帖子

632

积分

Rank: 9Rank: 9Rank: 9

UID
21402
好友
3
蛮牛币
236
威望
0
注册时间
2014-4-14
在线时间
265 小时
最后登录
2018-7-25

认证开发者

跳转到指定楼层
楼主
发表于 2018-7-17 18:42:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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回复可见:
游客,如果您要查看本帖隐藏内容请回复















3偶尔光临
273/300
排名
11461
昨日变化
7

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 | 只看该作者
如果您要查看本帖隐藏内容请

3偶尔光临
273/300
排名
7953
昨日变化
2

0

主题

77

帖子

273

积分

Rank: 3Rank: 3Rank: 3

UID
266294
好友
0
蛮牛币
22
威望
0
注册时间
2018-1-25
在线时间
58 小时
最后登录
2018-7-21
板凳
发表于 2018-7-17 19:30:21 | 只看该作者
thanks for the share!

3偶尔光临
195/300
排名
10876
昨日变化
4

0

主题

57

帖子

195

积分

Rank: 3Rank: 3Rank: 3

UID
191422
好友
0
蛮牛币
351
威望
0
注册时间
2016-12-12
在线时间
56 小时
最后登录
2018-7-23
地板
发表于 2018-7-17 20:47:50 | 只看该作者
这个Timer真的太实惠了。

4四处流浪
364/500
排名
8999
昨日变化
88

0

主题

193

帖子

364

积分

Rank: 4

UID
281167
好友
1
蛮牛币
668
威望
0
注册时间
2018-5-14
在线时间
55 小时
最后登录
2018-7-25
5#
发表于 2018-7-17 21:08:36 | 只看该作者
很好很轻大,感谢分享,支持一下

6蛮牛粉丝
1368/1500
排名
1497
昨日变化

0

主题

111

帖子

1368

积分

Rank: 6Rank: 6Rank: 6

UID
23042
好友
0
蛮牛币
2978
威望
0
注册时间
2014-4-27
在线时间
486 小时
最后登录
2018-7-25
6#
发表于 2018-7-17 21:27:30 | 只看该作者
写到最后,本文Timer的源代码隐藏可见

6蛮牛粉丝
1288/1500
排名
1583
昨日变化
3

0

主题

82

帖子

1288

积分

Rank: 6Rank: 6Rank: 6

UID
49519
好友
1
蛮牛币
2617
威望
0
注册时间
2014-10-17
在线时间
462 小时
最后登录
2018-7-20
7#
发表于 2018-7-17 22:44:08 | 只看该作者
666666666666666666666

6蛮牛粉丝
1288/1500
排名
1583
昨日变化
3

0

主题

82

帖子

1288

积分

Rank: 6Rank: 6Rank: 6

UID
49519
好友
1
蛮牛币
2617
威望
0
注册时间
2014-10-17
在线时间
462 小时
最后登录
2018-7-20
8#
发表于 2018-7-17 23:03:24 | 只看该作者
要是小编能把demo弄出来就最好了

排名
4118
昨日变化
22

8

主题

97

帖子

751

积分

Rank: 9Rank: 9Rank: 9

UID
251813
好友
3
蛮牛币
1544
威望
0
注册时间
2017-10-31
在线时间
318 小时
最后登录
2018-7-25

专栏作家活力之星

9#
发表于 2018-7-18 07:32:28 | 只看该作者
下载下来简单了解下。

5熟悉之中
608/1000
排名
3609
昨日变化
10

0

主题

99

帖子

608

积分

Rank: 5Rank: 5

UID
232255
好友
1
蛮牛币
1069
威望
0
注册时间
2017-7-15
在线时间
137 小时
最后登录
2018-7-25
10#
发表于 2018-7-18 08:13:34 | 只看该作者
如果您要查看本帖隐藏内容请

6蛮牛粉丝
1341/1500
排名
1733
昨日变化
7

1

主题

325

帖子

1341

积分

Rank: 6Rank: 6Rank: 6

UID
206337
好友
3
蛮牛币
219
威望
0
注册时间
2017-6-5
在线时间
321 小时
最后登录
2018-7-25
11#
发表于 2018-7-18 08:26:37 | 只看该作者
膜拜大佬

5熟悉之中
667/1000
排名
2721
昨日变化
13

0

主题

34

帖子

667

积分

Rank: 5Rank: 5

UID
165111
好友
0
蛮牛币
1334
威望
0
注册时间
2016-8-31
在线时间
151 小时
最后登录
2018-7-25
12#
发表于 2018-7-18 08:49:44 | 只看该作者
666666666666666
[发帖际遇]: LTY123 发帖时在路边捡到 2 蛮牛币,偷偷放进了口袋. 幸运榜 / 衰神榜

排名
17981
昨日变化
547

2

主题

20

帖子

87

积分

Rank: 2Rank: 2

UID
280327
好友
0
蛮牛币
47
威望
0
注册时间
2018-5-8
在线时间
37 小时
最后登录
2018-7-25
13#
发表于 2018-7-18 08:50:19 | 只看该作者
thanks for the share!

5熟悉之中
520/1000
排名
4089
昨日变化
25

0

主题

39

帖子

520

积分

Rank: 5Rank: 5

UID
233767
好友
0
蛮牛币
549
威望
0
注册时间
2017-7-23
在线时间
159 小时
最后登录
2018-7-25
14#
发表于 2018-7-18 09:00:32 | 只看该作者
6666666666666666

6蛮牛粉丝
1143/1500
排名
3350
昨日变化
18

9

主题

479

帖子

1143

积分

Rank: 6Rank: 6Rank: 6

UID
214924
好友
2
蛮牛币
2499
威望
0
注册时间
2017-3-28
在线时间
251 小时
最后登录
2018-7-25
15#
发表于 2018-7-18 09:01:40 | 只看该作者
666666666666666666666666
[发帖际遇]: 一个袋子砸在了 fengxs420 头上,fengxs420 赚了 1 蛮牛币. 幸运榜 / 衰神榜

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 新宝娱乐城博彩打不开 返回列表
  • 香港田径锦标赛飞人夺冠 2018-12-12
  • 李思思元元月亮姐姐 盘点央视主持人与子女温馨合影 2018-12-11
  • “忻州工匠”“忻州技能标兵”评选活动启动 2018-12-11
  • 包住内力,在不断变化中寻找契机,可出击可借力亦可卸力。 2018-12-10
  • 广州中考首用计算机辅助命题 满满的广州元素 2018-12-09
  • 植树、采茶、挖野菜…… 这才是春天正确的打开方式 2018-12-08
  • 【纯黑】《生化危机7》克里斯DLC不是英雄 2018-12-08
  • 150块地铁灯牌高调“炫父” 温暖南京城 2018-12-07
  • 【光明网专论】鞠立新:习近平新时代中国特色社会主义经济思想的内涵、逻辑和特质 2018-12-06
  • 江西“放管服”改革再出实招 2018-12-05
  • 首列商用磁浮2.0版列车下线 适用中心城市到卫星城间交通--旅游频道 2018-12-05
  • 空警-500改进型新照曝光,监控效率成倍提升 2018-12-04
  • 对美敲诈老手不能软越软越诈你要打就来 2018-12-04
  • 赵旭日:对阵恒大很有缘 比赛要一场一场去踢 2018-12-03
  • 《数码宝贝故事》第三阶段首发初回特典公布--人民网游戏 2018-12-03
  • 315| 647| 694| 980| 700| 468| 239| 84| 622| 458|