专栏首页Web行业观察虚幻引擎中的节流与防抖

虚幻引擎中的节流与防抖

最近研究虚幻引擎(Unreal Engine,UE),打算从Web开发转型成游戏开发。日后会不定期发布和游戏开发相关的经验总结,由浅入深。


UE的学习主要三大块:GUI操作,蓝图,C++。虽然对于外行人来说不学C++也能做UE开发,但计算机专业的同学可以在最短的时间内掌握UE引擎,因为UE编辑器的GUI以及可视化语言蓝图都包含着很多“软件哲学”,似乎每一处的设计都散发着亲切感,让人一目了然。就像微信GUI的设计理念是让人“不用教就会用”,UE编辑器的GUI也渗透着许多行业设计的默契和习惯,蓝图实质上则是图形化的C++。

废话不多说,蓝图API中和计时器线程相关的函数有2个:Delay和Retriggerable Delay,经过研究,它们分别是节流延迟和防抖延迟。

Delay:节流

https://docs.unrealengine.com/en-US/BlueprintAPI/Utilities/FlowControl/Delay/index.html

Delay函数是自带节流属性的计时器,表面上它能让你”睡眠“一段时间后再执行下一个函数,背后还默默地给输入做了节流(throttle),文档上说:计时期间再次调用会被忽略,也就是给单位时间内函数调用次数设限。我们来做个实验:

我们来看这个线程:当按空格键后打印”Hello“,紧接着睡1秒,然后打印”Hello World“。游戏开始后疯狂按空格,控制台变成这样:

可以看到,按了多少空格就打印多少“Hello”,但1秒之内至多打印1个“Hello World”,因为Delay方法做了节流。

Retriggerable Delay:防抖

https://docs.unrealengine.com/en-US/BlueprintAPI/Utilities/FlowControl/RetriggerableDelay/index.html

Retriggerable Delay方法从字面上看是“可再触发”的延迟,文档上说计时期间如果再触发会重置计时器(清零),重新计时,直到规定时间内没有触发才算完成。这不就是防抖(debounce)吗,于是我们再做一个实验:

还是疯狂按空格,然后停止,控制台输出如下:

可以看出,只有最后一次输出了“Hello World”,意味着只有最后一个空格完成了Retriggerable Delay,这就是防抖。

总结:

学习虚幻引擎的API是一个漫长的过程,如何快速记忆决定了学习效率。人脑是有过目不忘的能力的,只是很难调用这个功能,能否调用它在于你能否成功“说服”自己的大脑,让大脑相信某个信息是有意义并值得存储的,然后大脑才会“秒记”这个信息。

建立知识点关联就是一种向大脑证明意义的绝佳方式,本文中,即使不提防抖节流的概念,相信你也能理解Delay的含义,但将Delay和已知的知识点联系起来,你就可以瞬间将它铭记。

本文分享自微信公众号 - WebHub(myWebHub),作者:金恒昱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 编码的浪漫:完美序列化的官方评测

    虽然以前使劲吹过MessagePack,认为它是JSON的完美替代品,但还是发现了它的缺陷,最终光荣弃坑。于是我从头开始设计了MessagePack的替代品——...

    Jean
  • SVN之于GIT的理论优势

    SVN(SubVersion)是Apache下一个开源的中心化版本控制系统,采用客户端/服务器架构存放项目仓库(仓库 = 代码 + 历史)。和分布式的Git相比...

    Jean
  • 前端系漫游指南

    这份指南纯粹是某人的自嗨产物,因为有不少人会来问他前端该如何入门种种,于是他就自己对于前端的认知整合了这玩意儿,仅代表个人意见,供以参考(´c_`)

    Jean
  • 外观模式

    上面的例子中WalkingDrone类隐藏了Leg类的复杂同步操作,提供了一个更为简单的接口。

    用户2936342
  • 【干货】NumPy入门深度好文 (下篇)

    重塑 (reshape) 和打平 (ravel, flatten) 这两个操作仅仅只改变数组的维度

    yuquanle
  • 盘一盘 Python 系列 2 - NumPy (下)

    重塑 (reshape) 和打平 (ravel, flatten) 这两个操作仅仅只改变数组的维度

    代码医生工作室
  • 盘一盘NumPy (下)

    重塑 (reshape) 和打平 (ravel, flatten) 这两个操作仅仅只改变数组的维度

    石晓文
  • 盘一盘NumPy (下)

    重塑 (reshape) 和打平 (ravel, flatten) 这两个操作仅仅只改变数组的维度

    double
  • 盘一盘 Python 系列 2 - NumPy (下)

    重塑 (reshape) 和打平 (ravel, flatten) 这两个操作仅仅只改变数组的维度

    用户5753894
  • 使用TaskManager爬取2万条代理IP实现自动投票功能

      话说某天心血来潮想到一个问题,朋友圈里面经常有人发投票链接,让帮忙给XX投票,以前呢会很自觉打开链接帮忙投一票。可是这种事做多了就会考虑能不能使用工具来进行...

    用户1168362

扫码关注云+社区

领取腾讯云代金券