浅谈Scratch的舞台刷新机制 Part 3——隐藏对象与加速模式
“ 顺序结构的代码,在执行过程中,都不会刷新舞台,只有在执行完最后一块积木后,才会进行刷新;而循环结构的代码,每一轮循环都会刷新一次舞台,如循环结构中角色的旋转效果,每执行完一次右转的代码,当轮循环结束,舞台刷新一次,如此我们就会看到角色旋转的过程了。循环结构不能单独存在,循环结构中必然包含顺序结构,所以本质还是顺序结构执行完后对舞台进行刷新。”
在《浅谈Scratch的舞台刷新机制 Part 1——自制积木的不刷新屏幕功能》一文中,介绍了“运行时不刷新屏幕”功能的原理及其应用;在《浅谈Scratch的舞台刷新机制 Part 2——在常规积木中的应用》介绍了顺序结构的代码和循环结构代码对于舞台刷新的处理,以及Scratch中阻塞状态的本质。本文将会介绍Scratch中隐藏对象的舞台刷新方式与加速模式。
01
情景复现
通过之前两篇文章,对于在不同情况下舞台的刷新机制都已经有了一定的了解。但是还有一种情况我们尚未讨论。舞台刷新的目的是为了让用户观察到程序运行的效果及其过程,试想一下,如果一个角色本身就是看不见的,那舞台还需要去大费周章地刷新吗?先来看一个实例
代码:
可见的角色在缓慢移动的过程中先隐藏再显示
小猫“闪现”
角色在显示状态下,执行循环结构中的移动代码时,不断刷新屏幕,因此可以看到角色移动的过程,且移动速度较缓慢。角色切换至隐藏状态后,同样的代码瞬间就执行完毕,造成瞬移、闪现的效果。结合《浅谈Scratch的舞台刷新机制 Part 2——在常规积木中的应用》中关于舞台重绘需要消耗时间的说法,可以推测,角色之所以闪现、代码之所以执行效率如此之高,是因为免去了舞台刷新的步骤,也就是说,隐藏的角色是不会刷新舞台的。
02
应用
这个特性的发现具体有什么用呢?可以加快局部对象的程序执行效率,使用起来比“运行时不刷新屏幕”功能更方便一些,且不局限于角色。以2.0中的冒泡排序为例。
代码:
主程序,插入20个随机数,等待空格按下开始排序,并计时
冒泡排序
运行过程:
排序过程
运行结果:
对20个数字进行排序用时6.396秒
由于列表显示器位于舞台中,在2.0中也需要通过舞台的刷新来展示其变化,所以
在函数Buble Sort中,在开头加上【隐藏列表】,在末尾加上【显示列表】
对20个数字进行排序时,隐藏列表,用时0秒
自信地将样本容量扩大,尝试对100个数进行排序。
100个数字的冒泡排序依然在非常短的时间内完成,而在列表不隐藏时对100个数进行排序,耗时将达到40秒左右。看来舞台刷新消耗的计算机资源还真不小。
本案例使用2.0进行测试的原因是,3.0中即使列表处于显示状态,也不会刷新舞台,无论显示还是隐藏,对1000个数进行冒泡排序的耗时都在3~5秒这个量级。所以在2.0的项目中,可以通过将列表隐藏来加快和列表相关代码的执行效率。
03
加速模式
加速模式可以通过工具栏开启/关闭,也可以通过SHIFT+鼠标左键单击绿旗按钮来开启。
代码:
通过变量count计算循环次数,数值变化越快表明程序运行速度越快
加速模式效果
开启加速模式后count数值飞快增长
加速模式开启后可以大幅加快程序运行效率,结合之前不刷新屏幕相关效果,我对于加速模式的推论是:如果是完全的不刷新屏幕,我们是无法看到角色移动的,而在加速模式下也能看到角色移动,只不过是以瞬间移动的形式,所以加速模式的本质是减少屏幕刷新次数,从原先的每1轮循环都刷新1次屏幕,加速至比如每100轮循环才刷新1次屏幕。这部分内容仅仅是推论,有待商榷。
04
加速模式的应用
加速模式可以应用在一些计算量特别大的案例中,以《蒙特卡罗方法》为例。
蒙特卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。
在本案例中用来计算圆周率。通过往一定范围内进行大量地随机投点(这个范围是圆的外接正方形),统计落在圆的范围内的点数,来计算出圆周率的近似值。由于投放数量十分庞大,所以需要使用加速模式。
在加速模式下利用蒙特卡罗方法进行10万次投点实验,落在圆内的数量为77480,圆周率近似值为3.0992
尽管这种统计模拟方法计算圆周率精度较低,但是其蕴含的思想还是值得品鉴的。
至此,Scratch中关于的舞台刷新机制的剖析告一段落。希望本文也能“刷新”各位Scratchers的认知,起到一定的帮助。如果对于舞台刷新机制你也有相同或者不同的见解,欢迎在Scratch格物堂留言。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com