scratch中的“移动10步”是scratch运动类积木中的第一个积木,也是大多数初学者使用scratch的时候用到的第一个积木命令。
当我们运行“移动10步”积木时,小猫会向右移动10步(目测其实也就一点点距离)。那么“移动10步”究竟在scratch中,他是如何去执行的呢,今天我们来探究一下这个问题。
这篇文章可以让初学者更好的去理解scratch“移动10步”的本质。
一."移动10步"的距离并不是你想象的10步那么远
最开始我们运行移动10步积木块的时候,或多或少会有一些疑惑,这移动10步怎么就移动了这么点的距离呢?其实scratch中移动10步并不是移动10步的距离,而是移动了10个像素单位。
scratch的舞台大小是480(长)*360(宽)的像素单位,移动10步的本质其实就是移动了舞台宽度的四十八分之一(把舞台长度平均分成48份,其中一份的距离就是移动10步的距离)的长度。
二."移动10步"与"方向"的关系
1.角色的属性:方向
scratch中的角色都有面向某一方向的属性,这个和我们站着的时候也是面向了东南西北或者某一个方向的意思一样。
当我们点击角色区的方向输入框,弹出的圆盘上有一个箭头,我们可以通过鼠标点击旋转这个箭头,scratch的角色也会跟着旋转,同时方向的数值发生相应的变化。
scratch角色的方向拥有属性值和它的取值范围。方向的取值范围其实也就是它旋转一圈的大小,我们知道旋转一圈也就是360度,那么scratch角色的方向是不是就是用0-360度来表示的呢?
-
"方向"的取值范围:-180度<方向取值范围<=180度
运动类积木中最后的一个积木块是圆形的,叫"方向",scratch中所有圆形的积木代表它存储了一个数据,那么这个叫"方向"的积木存储的就是角色的方向值,它的值和角色区的方向输入框内的数字是一样的,他们的值都是表示现在角色所面向的方向。
如果一个角色面向90度方向,然后它又向右转了180度,那么它现在面向的是哪一个方向值呢?
方向是一个角色的属性,代表角色与0度所偏转的角度,它的值有取值范围-180度<方向取值范围<=180度。
旋转度数是一个动作,一个角色它可以旋转任意的度数,但是旋转完了它必定面向的是一个确定的方向。
那么,旋转度数与角色实际面向的方向该如何去换算呢?
想象一下:你向左转180度和向右转180度之后面向的方向是一样的,所以scratch会自动把负180度转换成180度。
同理,如果一开始面向0度,那么你向右转270度(90度+180度)和向左转90度是一样的,所以如果一个角色面向90度方向,如果它又向右转了180度,那么它现在面向的就是负90度。
所以本质上,scratch中的方向表示的是角色偏离0度方向的值,所以不管你怎么去旋转(哪怕旋转10000度),你所偏离0度方向值的范围始终是在-180度<方向取值范围<=180度之间(方向的绝对值小于等于180)。
所以,一个面向0度的角色,角色旋转了多少度之后它面向的方向值可以用下图的程序去计算:
2."移动10步"与"方向"的关系
因为scratch中角色默认的面向方向都是90度,所以我们运行移动10步的时候,角色才会向右移动。
如果我们要让角色向上移动10步,有两种方法:
1.通过运行代码改变角色面向的方向:
找到“面向90方向”积木块,把数字改成“0”(即表示角色面向的方向是向上),单击鼠标运行积木块即可。
2.直接在角色区更改角色面向的方向:
找到角色区的“方向”输入框,直接把输入框内的数字改成“0”,鼠标离开输入框,在任意位置单击一下,方向就会变成0度(我们会看到箭头指向向上)
当角色面向的方向是0度时,运行移动10步角色就会向上移动10个像素单位。
三."移动10步"角色并不是真的移动了10步
1.舞台的刷新机制与电影播放的原理:
“移动10步”其实在软件运行时角色不是真的向前移动了10个像素单位,而是消失的同时又在所面向的方向10个单位像素的地方显示出来了,我们称之为舞台的刷新机制,这个和我们看电影类似,电影的原理是“视觉暂留”。人眼在某个视像消失后,仍可使该物像在视网膜上滞留0.1-0.4秒左右。电影胶片以每秒24格画面匀速转动,一系列静态画面就会因视觉暂留作用而造成一种连续的视觉印象,产生逼真的动感。
2.舞台刷新的时间:
scratch中“移动10步”的本质其实就是刷新了一下屏幕,角色消失的同时又在所面向的方向10个单位像素的地方显示出来了,这个过程的时间很短,时间大概是0.033秒,测试的方法我之前写过一篇文章-《scratch中的“重复执行”指令执行时消耗的时间的问题》,只不过那时候对于舞台的刷新认识还不足,但是测试刷新时间的方法是有效的。正是由于我们的视觉暂留,我们以为角色向前移动了10个单位。
也就是说,如果我们重复执行“移动10步”指令,看到小猫在屏幕移动的画面,其实就是在看一部每秒30帧速率的动画(电影的帧速率一般是24帧,也就是每秒播放24个图片)
3.本质:
综上所述,scratch中”移动10步“的本质并非角色真的移动了10步,而是舞台刷新了角色所在的位置(新位置是原来的位置所面向的方向10个单位的距离),刷新的过程花了0.033秒。
需要注意的是,如果同时4个“移动10步”叠加在一起运行,那么程序会直接移动40步后刷新屏幕,也就是说4个“移动10步”积木块叠加在一起的效果等同于“移动40步”的积木块。
四:其他
“移动10步”中的数字“10”是可以改变的,重复执行“移动10步”时,数字越大移动速度越快。
“移动10步”中的数字也可以是小数。
“移动10步”中的数字也可以是负数,如果数字是负数,那么角色会向其所面向的方向的相反方向运动。
总结:
scratch中的运动类的第一个积木,“移动10步”的本质是:
当运行“移动10步”积木时,屏幕会刷新,角色在0.033秒内,从初始位置重新出现在其所面向方向10个单位距离的位置。
参考资料:
浅谈Scratch的舞台刷新机制 Part 2——在常规积木中的应用 原创 小阿斌 Scratch 格物堂 2019-08-01
百度百科-帧率
本文作者姜老师,热爱少儿编程,欢迎加微信交流13831105925