该手册由 gitblock.cn 上的一位用户 -6 撰写。
其用户页链接为 https://gitblock.cn/Users/1099557。
为方便分享,我将文章转载到了这里。

目 录

  1. 前言
  2. 角色

    1. 名字、位置、方向、大小
    2. 翻转方式
    3. 显示、隐藏
    4. 拖动
  3. 积木

    1. 运动
    2. 外观
    3. 声音
    4. 事件
    5. 控制
    6. 侦测
    7. 计算
    8. 变量
    9. 列表
    10. 自制积木
    11. 拓展

      1. 画笔
      2. 音乐
      3. Makey Makey
      4. 其它拓展
    12. 编辑器操作技巧

3-5 ...
6 ...
附录 ...

__0__. 前言

这个手册主要是给接触过Scratch 3.0但是对一些情况感到迷惑的人们看的,如果你想要入门指南,可以直接点击“教程”按钮查看Scratch自带的教程,他们会告诉你如何使用基本积木制作简单的游戏。
Scratch很简单,很容易上手。但Scratch又很不简单,有一些特性和技巧你未必了解。在不完全了解Scratch的情况下,凭感觉拖动积木形成程序,会让你的作品遇到越来越多的坑。我会尽量把内容做的简洁,希望大家能够避开坑,学到更多创作技巧,少走弯路。
内容中有对拓展,二创编辑器,社区的推荐,这些内容只是因为其对创作的确有帮助。
有【需要考证】标记的内容表示这个内容没有经过严格实验证明。

这不是官方文档,只是个人的猜测。一切以Scratch真正的运行结果为准,因为只有实践才能出真知。

如果你发现了文章里的错误,请在评论区回复,非常感谢!

1.1. 名字、位置、方向、大小

你无法将 “_stage_” “_edge_” “_mouse_”“ _random_” 作为角色名字。它们分别代表舞台,舞台边缘,鼠标指针和随机位置。
角色的位置就是造型中心点所在位置,大小是角色以造型中心点为中心缩放的比率,不过,方向是角色的右侧朝内的方向。
顺时针为正方向,向上为0度,向右为90度,向下为180度,向左为-90度。由于方向是角色右边朝向的方向,因此 “90度”才是让造型转向和设计页一样的方向。
无论方向取什么值,使用方向积木获得的值必然在-180到180之间,__不包括-180__,也就是-180<方向≤180。类似“方向>180”的终止循环条件是不可以的,它会一直循环下去。

移动角色的时候,Scratch为了防止角色离开角色舞台太远,导致你无法拖动,因此角色会被限制在窗口内,需要这两个条件之一成立:
(1)角色所在的最小矩形未碰到舞台边缘;
(2)角色所在的最小矩形虽碰到舞台边缘,但是离边缘还能露出15单位距离。

这里的最小矩形,指刚刚好把角色从上下左右四面框起来的框。

改变大小也是,有条件都需要满足:
(1)宽不大于720,高不大于540
(2)宽和高都不小于5

如果(2)和(1)不能同时满足,优先满足(1)。

TurboWarp 中可以在高级选项中解除此类限制。

查看附录1了解如何在原版 Scratch 中绕过角色位置和大小的限制
查看附录2来了解如何增大矢量图角色的矩形判定大小

1.2. 翻转方式

任意旋转:绕中心点旋转
左右翻转:当方向为正数时(别忘了-180<方向≤180),正常显示,否则镜像显示
不可旋转:永远不旋转地显示

1.3. 显示、隐藏

显示或者隐藏造型。__被隐藏的造型不能被点击__(当角色被点击无效),__不能被其他角色检测碰撞__(就算碰到了也不成立)。但是 __可以判断被隐藏的自己是否碰到舞台、鼠标指针或者其他角色__。

1.4. 可拖动

这一模式 不能在编辑器中设置,只能手动执行积木设置__,但是点停止后会保留,__会被保存到文件。
在创作页角色永远是可以拖动的。 只有在全屏状态或者作品发布后才会影响。
“可拖动”模式会导致“当角色被点击”反应变慢,在鼠标按下时这一积木不反应,松开鼠标后才反应。__如果拖动了角色,则该积木不反应。__(原来是一按下鼠标就反应)
拖动角色会导致角色移到最顶层。

在 TurboWarp 中,可以启用插件 Non-draggable sprites in editor,使得角色在创作页内不可通过拖动改变位置。这有助于你测试需要拖动角色的项目。

2.1. 运动

移动的方向就是当前的方向。
移动(负数)步可以实现反方向行进。
移到/面向(随机位置)里的随机位置可以改成(鼠标指针),在有其他角色时还可以改成其他的角色,他会移到其他角色主体所在的位置(哪怕隐藏了)
在()秒内移到...积木运行时,会无条件无视过程中执行的任何改变坐标的积木。【需要考证】
碰到边缘就反弹:如果角色碰到边界就会被从边界推回。如果角色朝向墙面,则翻转运动角度。上下边缘上下翻转,左右边缘左右翻转,如果角色朝向贴近墙面,则会强行调整到与墙面有大概12度的夹角。

移动、坐标、方向积木相关坑,请参见1.1.

2.2. 外观

清空“说(),思考()”括号里面的内容,可以实现移除对话气泡。把“说() ()秒”的秒数设成0也可以。
对话气泡可能会被移到最顶层的角色挡住。
换成(造型1 v)造型 中,可以在括号里放入变量,运算积木,切换到指定编号或者名字的造型。
注意:造型名字区分大小写,背景也一样。
如果括号中放入了数学运算积木或者变量积木,则Scratch会优先考虑切换到对应的编号;否则,优先考虑切换到对应名字。例如,我的角色里有两个造型,其中一个名字叫“造型”,是第 1 个;另一个名叫“1”,但是是第二个;这时切换到造型((0)+(1)),放入了加法积木,得到数字1,就会优先考虑编号,切换到第一个造型。如果切换到造型(连接“”和“1”),得到文字1,则会优先考虑名字,切换到“1”造型。
如果找不到对应造型,造型不会切换。

图像特效

“颜色”特效以200为一个单位循环,改变造型的颜色。
“鱼眼”可以让造型中心凸起。
“亮度”设为正数会让角色变得更白,__设为负数会让角色变得更黑。__
“漩涡”就是扭曲,没啥好说的,正数顺时针,负数逆时针。
“像素化”特效以10为一个单位,使得角色被打码,每个正方形码的边长,就是特效数值除10。
“马赛克”特效,可以理解为“田”字NxN小屏幕,以5为单位,N=1+[特效数值÷5]。
“虚像”是透明度,最大100。虚像为100时 __不接受鼠标点击__,但是可以碰撞和被碰撞。
“大小”积木相关坑,请参见1.1.
层数包括本体和克隆体和隐藏的克隆体。

奇怪的积木

这些积木是为了兼容以前的Scratch创作出的文件而存在的,在积木托盘里不出现。

部分Scratch改版加回了部分积木。例如 ClipCC 和 TurboWarp。

“把背景换成()并等待”是一个Scratch 2.0的积木,在Scratch 3.0的积木列表中不出现,但仍然起作用。它会等待“当背景换成[...]事件的处理。
“隐藏所有角色”和“伸缩()”是已被淘汰的积木,在Scratch 3中不起作用。

2.3. 声音

千万不要将“播放声音( v)”单独地放入循环中! 如果你需要循环播放背景音乐,请使用“播放声音( v)并等待”。
可以把变量或者运算积木放入播放声音的圆括号中。这样子可以播放指定名字或者编号的声音。__声音名区分大小写。__ 其详细行为可以参考2.2
如果找不到对应声音,声音不会播放。

音乐播放的独立性

相同的声音不能同时播放。 如果执行播放一段正在被播放的声音积木,之前播放中的相同音乐会被打断。例如声音是说“一二三四五”,在放到“三”的时候再次播放此声音,“四五”会被打断,不会和后面的“一二”同时放出。
不同的音乐是可以同时播放的,哪怕是同一首音乐复制也算不同音乐,但是同一首音乐在不同的克隆体不算。
停止所有声音只会停止 除了通过“敲锣打鼓”拓展发出的声音之外 的所有声音。

音乐参数控制

音量是角色私有变量 ,哪怕舞台也有一个“音量”。舞台,不同角色和不同克隆体的音量 __互不干扰__。如果舞台音量为0,角色照样能够发出声音。
如果在声音播放的过程中改变音量,声音的音量会立即被改变。
音调和左右平衡和音量一样。“清除音效”相当于把所有的效果设为0,也会立即改变正在播放的声音的效果。
音调效果是通过改变播放速度实现的。每提高一个八度,播放速度加快2倍。反之亦然。
音调不是以100为一个8度,而是以120为一个8度。这意味着一个半音是10,一个全音是20.
音调的取值区间为-360到360。如果强行设置超过区间的值会等同于-360或者360。

解释一下这里说的半音和全音是啥:
简谱上有 1, #1/b2, 2, #2/b3, 3, 4, #4/b5, 5, #5/b6, 6, #6/b7, 7 这12种音,加上上面和下面的点调整8度  
(画斜线表示两个表达一样,例如#1和b2是一个调,没有#3,b4,#7,b1)  
每相邻两个音之间的距离就是半音(1到#1, 3到4, 7到i 都是半音)  
每相隔一个音的两个音之间的距离就是全音(1到2, 3到#4 都是全音)  

提高的半音数:音调值÷10
播放所需时间:原时长÷e^(ln(2)×音调值÷120)

左右平衡:-100到100,负数左声道更响,正数右声道更响,会影响使用耳机或者双声道音响的人的听觉体验。
想让声音偏向左边,把左右平衡调小,想让声音偏向右边,把左右平衡调大,可以形成环绕声效果。

2.4. 事件

启动和停止

点击停止键后会停止所有脚本,并且删除所有克隆体,清除所有特效。角色所在的位置,状态和变量、列表的值会保留。
点击运行(也就是绿色旗子)也会先停止所有脚本,删除所有克隆体,清除所有特效,之后再 __重置计时器,清空回答__,启动绿旗积木。
停止按钮 不会重置或者暂停计时器或者清空回答。
查看附录3来了解怎么通过合理使用广播来让点击绿旗能够方便创作和调试。

点击、按键事件

“当角色被点击”积木会在按下鼠标的一瞬间触发。但如果设置了“可拖动”,它会在放开鼠标且没有拖动后才触发。
“当角色被点击”在运行期间可以被重新触发。
“当按下xx键”积木会在按下按键的一瞬间启动一次,如果按键被按住一段时间,它将连续启动。和你打字的时候按住退格键的情况类似。
“当按下xx键”的积木在运行的期间这个积木不能被触发。也就是说你可以利用这一点来防止上面的情况的发生。
查看附录4来了解如何防止这种情况。

大于号事件

“当[响度 v]>(10)”、“当[计时器 v]>(10)”这个积木只会在响度或者计时器从“小于或等于10”的状态转变为“大于10”的状态的瞬间触发。如果计时器已经超过了10,它将再也不被重复触发,除非重置计时器。点击绿旗或者使用重置计时器积木会重置计时器。
当这些积木存在时,绿旗会永远变成“按下”状态,停止按钮亮起。
可以使用“当[计时器 v]>(10)”的特性来在按下停止键后触发事件,但我很不建议大家在非必要情况下这么做。
这个积木下的积木在运行的期间这个积木不能被触发。

广播

Scratch中最直观又最复杂的机制。
广播在运行中如果收到相同名字的广播,__是会被打断并重新开始的。__ 详情可见附录6。
“广播( v)并等待”会等待所有广播积木完成。__如果广播积木运行时被同名广播打断,等待也会被打断。__
小心:当有克隆体存在的可能时,一定要注意,每一个克隆体都会接收广播。如果大意,有可能会出现“超量克隆”,“多次收到广播”的现象。可以用角色变量来标记本体和每一个克隆体,使用如果积木来只让本体进行操作。

2.5. 控制

等待

等待0秒也是会有等待时间的。甚至等待负数秒也是。
“等待<...>”会一直等待条件是否成立,直到条件成立才会继续。但有的时候,这个积木没有那么敏感。详见附录6

循环

在循环中存在改变画面显示(比如角色运动,造型改变等),会导致循环被限速,限制的速度为1秒30次。如果不存在影响画面显示的积木则不会限速。
在加速模式下,此限制解除。加速模式可以通过编辑菜单启用。
如果有多个循环同时运行,他们将会同步运行速度,除非遇到“等待”类积木强行等待。详见附录6
“循环直到<...>”会在循环条件为假时循环。旧版“当<...>循环”会在循环条件为真时循环。如果“直到”循环的条件一开始为真,循环根本不会进行。
重复执行(...)次中的(...)一经计算不再改变。例如(...)中为一个变量,原先为5,在循环的过程中改变它的数值,循环次数仍为5次,不会改变。

克隆体

克隆体克隆时会复制克隆体所有的状态,包括角色变量。克隆后“当作为克隆体启动”会触发。每一个克隆体的角色变量互不冲突。
在克隆体里使用广播克隆克隆体时需谨慎!如果控制不当克隆体会全部响应广播导致克隆体快速增长。
同时存在的克隆体最多只能有300个。
对重复功能的造型,灵活使用克隆体会使得创作更加方便。
“当作为克隆体启动”会在“克隆(...)”所在的积木段之后才启动。详见附录6

停止

“停止[这个脚本]”在自制积木里,并不会停止引用该积木的脚本,而是从自制积木中离开,继续引用这个积木的脚本。
“停止[该角色中的其他脚本]”会打断这个角色里的其他同时脚本,但是不会从自制积木里边打断引用该自制积木的脚本,也不会影响其他克隆体的脚本。要想这么做,可以使用广播实现。

奇怪的积木

“计数器”积木,还有“计数器加一”“清零计数器”模块,其实就是一个特殊的变量。
“重复执行[x v]中的(...)”原文是“for [x v] in (...)”,正确翻译是“重复执行(...)次,次数为[x v]”,功能是重复执行(...)次,每一次循环开始变量[x]会被设定为循环的次数。不会受其他循环和变量改变的影响。
“运行时不刷新屏幕”会将积木块一步到位地原子地执行,不受30帧限制,并且锁定其他循环,使得其中的变量免受其他循环的影响。但是如果拖得时间太长的话还是会强行刷新屏幕并趁机给其他的循环让路(大约一秒2次)。
这个积木的功能已经由自制积木的“运行时不刷新屏幕”功能代替。

2.6. 侦测

碰到

碰到(鼠标指针 v)里的“鼠标指针”可以改成“舞台边缘”或者其他角色(如果有的话)
碰到颜色(...)的判定较松,只要目标颜色和指定颜色差距足够小即可判定成功(详见附录7)。
颜色(...)碰到(...)中的颜色,指自己造型的颜色,会受颜色特效的影响。
注意:“碰到”这类积木的判断受舞台大小的影响。典型的例子就是某些Scratch游戏中本来不可以通过的缺口全屏后就可以通过了。
注意:如果造型中的颜色范围太小,缩小角色后会出现判定失败!因为它和其他颜色融合在一起了。
注意:碰到角色时,如果目标角色被隐藏,是碰不到的。但是目标角色透明度为100时可以。自己隐藏时可以碰到其他角色,和显示时一模一样。

颜色

碰到(...)颜色中的颜色,可以放入变量和计算积木。颜色和数字的对应规则如下:

透明度 × 16777216 + 红色 × 65536 + 绿色 × 256 + 蓝色 = 颜色数字

所有数值的取值范围:0-255,且为整数。透明度为0代表完全不透明,透明度为1-255时,1为最透明(但也不完全透明),255为最不透明。

例如
0 × 16777216 + 255 × 65536 + 255 × 256 + 0 = 16776960 (黄色)
128 × 16777216 + 0 × 65536 + 0 × 256 + 255 = 2147483903 (半透明蓝色)

可以借助十六进制数 0x 的力量来简化数字。例如上面的黄色可以表示为 0x00FFFF00,可以把前面的 00 省掉,变成 0xFFFF00。
半透明蓝色可以表示为 0x800000FF,刚刚好就是 “0x透明红红绿绿蓝蓝” 的格式。
如果没有透明,你还可以使用 # 格式,例如 #FFFF00。遇到类似 #66CCFF 的颜色,可以缩写为 #6CF。

按键

“按下(...)键”里的(...)可以放入变量来判断更多键盘上的按键。虽然无法区分按键的大小写,但是可以检测一系列特殊符号,例如!@#$%^&*()_+-=
特殊按键名:up arrow↑,down arrow↓,left arrow←,right arrow→,space空格,enter回车。

TurboWarp 和 共创世界 支持 backspace退格,delete删除,shiftcaps lock锁定大写,scroll lock锁定滚动,controlCTRL,escapeESC,insert插入,home开头按键。
其中 caps lockscroll lock必须按下去才算,指示灯亮是不算的。
尽量避免使用这些按键。这些按键在大多数其他社区不支持。

其他

“到(...)的距离”只考虑到主体的距离,不考虑克隆体。
在询问的时候打断别人很不礼貌。如果询问的时候被打断(包括“停止该角色中的其他脚本”),询问框会消失,回答不会改变。因此在有这种可能的情况下,你不应该通过检查回答是否为空来判断用户是否回答(详见附录8)
如果有多个询问同时触发,除了最早发起的询问外,后面的询问会被隐藏,完成前面的询问后后面的询问才会出现。
拖动模式详见1.4
仔细看,那个((... v)的[... v])前面的括号是能够放变量,计算积木进去的。“\_stage\_”代表舞台
“当前时间的[星期 v]”中,1代表星期日,2代表星期一,3代表星期二,4代表星期三,以此类推,7代表星期六。
“2000年至今的天数”是从2000年1月1日0时0分0秒开始的。说是“天数”,但是它是个很精确的小数,精确到小数点后十几位。你可以据此推算出当前时间的毫秒数。
修改系统时间后,必须重开网页或者重启编辑器才能在编辑器里使用改变后的时间。
点击绿旗后,计时器会被重置为0,回答会被清空。

2.7. 运算

Scratch 的运算模块有一些令人疯狂的特性,提前了解这些特性能够节省很多找错误的时间。

数字(1): 数字样式、计算范围、无限大和NaN

+,-,×,÷等模块,能接受的参数是数字,例如“0”,“234”,“-255.123”这种。如果参数以“0x”开头(可以利用复制粘贴和放入变量做到),可以处理十六进制数字(例如“0xA”代表10,“0x11”代表17,不区分大小写),如果参数是类似“1.234e12”这种,则会被认为是科学计数法“1.234×10^12”,也就是1234000000000。“Infinity”代表正无限大(数字大于2^1024-2^971,也就是大约1.797×10^308的时候,或者计算正数除以0的时候会变成Infinity),-Infinity代表负无限大(数字小于-2^1024+2^971和负数除以0)。其他情况会被视为0。
(这里用“负无限大”而不是“无限小”,是因为“无限小”是指一个无限接近于0但是不等于0的数。)
0除以0会产生NaN,如果这个除法很不走运地刚刚好在另外一个数学计算积木里边,它的结果将会被认为是0。所以你可以认为:__0除以0等于0__。

数字(2):精确度的丢失

当你计算小数的时候,例如,0.1+0.2,结果不是0.3,而是0.30000000000000004。
奇了怪了,这是为啥?
联想一下12位数的计算器里的计算:
1÷3=0.33333333333
0.33333333333×3=0.99999999999
但是实际上1÷3×3等于1,不等于0.99999999999,这是因为在除的时候计算器里只能保留十一位小数,出现了精度误差。
但是0.1,0.2只有一位小数,怎么会有精度误差呢?
因为浮点数里边是二进制的,在二进制下,0.1的二进制小数是0.0001100110011...(也就是二进制分数11/11110,转换为十进制就是3/30,也就是1/10),这肯定会遇到保留几位小数的问题,误差就这么产生了。
也就是说,在涉及到计算小数的时候,一定要注意这些误差。
由于有这些误差的存在,__不能直接用等号来比较小数__,而是要用类似“绝对值(A-B)<0.000001”这样的方法来解决。如果你想要显示他们,你只能通过额外设计程序来去掉零头,不然用户将可能被淹没在零头中。

阿儿法营的部分谜题在判断答案是否正确时忽略了这一问题,这导致使用正确的公式却不能通关谜题,改变运算顺序后才能通关。

哦,还有。 这个误差会随着数字的变大而变大。 举个例子:
9007199254740992 + 1 = 9007199254740992
整数只有在-2^53+1 到 2^53-1 之间,也就是
-9007199254740991 到 9007199254740991 之间才是准确的。

事实上,Scratch最多能够保证 15 位数 (999999999999999) 的有效数字,也就是说你输入的数字的前15位有效数字能够保证不变。

关于这个可以把人直接整疯的数字,我们刚刚是不是说了1除以0等于Infinity?这可不一定。
数学课上讲过,0没有正负,不存在“-0”这种东西,但是如果你在Scratch里边计算“1÷(-0)”的话……
没错,浮点数的设计里存在-0这种东西。不过不需要担心这个,大部分情况下-0和0是一样的。只要你不是故意要触发这个,你根本不会发现-0会对你的作品造成影响。
想知道关于小数运算的更多知识,可以查看IEEE 754标准的百度百科:https://baike.baidu.com/item/IEEE%20754/3869922和JavaScript双...
Scratch的四舍五入是真的四舍五入,不是四舍六入五取偶。

0.1 + 0.2 = 0.30000000000000004 这一现象如此出名,甚至有以此命名的网站https://0.30000000000000004.com/
看一看IEEE-754规范下双精度浮点数到底是怎么被表示的https://bartaz.github.io/ieee754-visualization/

大于,小于和等于

Scratch的比较是 不区分大小写 的。“A”=“a”成立。
但是切换造型、背景时,名称区分大小写。可以利用这一点来判断字母的大小写。
比较的时候,__Scratch会倾向于把变量,算式的结果当成数字比较__,导致当你在比较文本的时候,你发现:
“000” = “0000” 成立。
“    123” = “123” 成立。
更离谱地,“12345678901234567777” = “12345678901234567890”也成立。
因为它们被当成了数字,然后又遭到了精度丢失,所以他们就相等了。
如果想比较这种“一串数字”,在它们的前面接上一个“x”就能正常比较了(别的字母或者是不会引起混淆的东西也可以)

函数

atan(1/0)=90,atan(-1/0)=-90.
ln(0)=log(0)=-Infinity.
e^(-1/0)=10^(-1/0)=0.

其他

将六边形放入能处理文字的地方,如果条件成立,会视为文字“true”,否则视为“false”。
将六边形放入只能处理数字的地方,如果条件成立,会视为数字1,否则视为数字0。但是“true”和“false”文本都视为0。
“包含”积木,如果后面的查询文本留空,无论前面的文本是啥都成立。
“包含”的判断 __不区分大小写__。
余数永远是正数。“-2”除以5余3。小数也可以取余数。

2.8. 变量

在建立变量前,一定要注意自己建立的是“适用于所有角色”还是“仅适用于当前角色”的变量,一旦弄错,后面再改就会非常麻烦。你不得不新建一个新的变量,把所有有旧的变量的地方一一改正……

在 TurboWarp 中,你可以使用 Switch variables between "For all sprites" and "For this sprite only" 插件来把变量在“适用于所有角色”和“仅适用于当前角色”之间改变。

变量左边打勾后,会在舞台上显示。双击改变显示模式,右键选择显示模式。在滑动条模式里可以右键改变滑杆范围。__把滑杆的最大值或者最小值改成小数(例如1改成1.0),可以使用滑杆设定精确到二位小数的数字。__

变量最长为 536870888 个字符。这是由于新版 v8 JavaScript engine的限制。注:538670888=2^29-24

如果你使用Firefox而非Chrome,edge或者离线编辑器,你可以突破这个上限。因此如果你的作品的变量的长度有可能达到 536870888 以上,你需要考虑到Chrome系列浏览器和离线编辑器会无法正常运行你的作品。不过这个上限已经高到离谱,我想应该没几个 Scratcher 会有在 Scratch 里边处理多达 536870888 个字符的需求吧!

https://www.zhihu.com/pin/1431685749477994497
chrome太垃圾了,字符串只能放536870888个字符,导致jsPDF无法生成一个预计体积为800m的pdf,而firefox的字符串最大容量是chrome的两倍。而由于edge也用了chromium,这导致现在的edge也成了垃圾。

另外一些让人疯狂的数字:
0.30000000000000004
998244353
2147483647
124554066086
9007199254740992

2.9. 列表

列表最多只能有200000项。__第几项的几从 1 开始算。__

在 Scratch 2.0 和 TurboWarp 中没有此限制。

如果你把列表当成变量用,你会得到把列表里的全部项目用空格连在一起的文本。如果列表里面都是“单个文字”,则它们会直接连在一起,没有空格。

注意这里的“单个字符”不包括由计算积木算出来的一位数字(例如“1+1”得到的2)。必须是直接设定、或者通过询问、文字类积木等截出来的单个字符,也就是不能使数学运算算出来的数字。

在“...列表的第(...)项...”这样的积木里,(...)处可以通过复制粘贴或者变量的方式塞入一些特殊单词,例如:
“all”代表全部项目(仅在删除列表项目时有效,等同于删除列表的全部项目)
“last”代表最后一个项目。
“random”代表随机的一个项目。
“第一个(...)”和“包含”__不区分大小写__。

如果你在导入列表的时候发现的中文变成了乱码和问号,请查看后面加粗的一大段。

列表显示的时候可以通过右键导入、导出,但是相当离谱的是,如果有变量和这个列表同名,导入导出功能失效。
而且,导出的时候是txt文件,导入的时候,居然无论文件拓展名是啥,Scratch 都会把文件当成csv格式,导致只要 列表里边一有英文逗号,列表导入后就不一样了! 在检测到有多个列的时候还会莫名其妙地询问你要“选择哪一列”。我怎么知道该选哪一列!
解决方案:
(1) 避免使用英文逗号,
(2) 将要导入的内容粘贴到 Excel 的一列里,另存为.csv文件,然后再导入 中文会乱码!
(3) 直接学习csv文件格式,徒手转换,再导入。
(4) 制作一个转换器。详见附录10。
csv文件格式:使用英文逗号分列,如果格子内容包含英文逗号,使用英文双引号括起全部内容,如果内容还包含双引号,用俩个双引号代表一个双引号。例如:

Tom,15,Friday
Ford Pink,16,Saturday
"Heru, the kid",17,Sunday
"the ""master""",-1,Everyday

所以你只需要把所有内容中引号变两个,再在前面和后面加上引号就可以了。

TurboWarp 在导入的时候会根据第一行是否有没被双引号包括的逗号来判断这个文件是.txt文件还是.csv文件。

如果你在导入列表的时候发现你的中文变成了乱码和问号,那意味着你导入的txt文件的格式不对。打开你的txt文件,选择“文件” -> “另存为”,在格式中选择“utf8”格式后保存,再导入即可。

2.10. 自制积木

自制积木,也就是大家常说的“定义”或者“函数”,可以把常用的功能或者特定的功能定义为自制积木,来减少积木的数量,简化创作流程,让确定逻辑,修复错误更加的方便。

定义

自制积木只能在当前造型或者背景里面使用。这意味着,你可能需要多次定义自制积木,复制里面的内容。
不能定义两个相同的自制积木,这会产生冲突__(虽然Scratch不会拦截),这里的相同指 __积木文字和参数的类型和位置相同__(参数的名字可以不相同),例如“移动到(x坐标)(y坐标)”和“移动到(x)(y)”是一样的。__积木名字区分大小写。 发生冲突后的解决方法见下一段。
你可以通过直接把自制积木的定义拖动到其他角色的上面,或者通过Ctrl+C,Ctrl+V的方式,将自制积木的定义积木复制到其他角色上,但是请注意:__如果你想要更新已经复制过的自制积木的内容,一定不要把定义积木复制过去,这会导致出现两个一模一样的定义积木,导致冲突__,而且在有引用的情况下还删不掉。
解决方法:把不需要的那个定义积木后面的内容删掉(以防止误触发积木),点击定义积木,按下delete键或者退格键,即可删除不需要的那个定义积木。
通过角色拖动,Ctrl+C,Ctrl+V的方式复制积木时,可能会复制到自制积木的引用,却没有复制自制积木的定义,或者复制后使用上文所说的“退格键”法,导致有引用没有定义,这会导致引用失效。这种情况下引用积木不会有任何操作发生。解决方法是把它的定义也复制过来,或者新建一个一模一样(名字和参数的类型和位置都要一样,参数的名字可以不一样)的定义积木来弥补这个缺失的定义积木。

参数

自制积木里可以有参数,分别是文本参数和布尔值(判断)参数。参数名可以留空(不建议)。注意:引用自制积木时,__如果判断参数里面没有放入积木,可能会发生不可预料的后果。__ 所以在想把它设定为假的时候,最好还是放入一个积木。
参数是可以拖到定义积木外边去的,还可以从一个定义拖到另外一个定义。只要参数的名字和定义里的参数名字对上,它就能获取到数值。否则,数字的默认值是0,判断的默认值是假。__名字区分大小写。__

运行时不刷新屏幕

参见 2.5.__“奇怪的积木”__ 一节。
“运行时不刷新屏幕”会将积木块一步到位地原子地执行,不受30帧限制,并且锁定其他循环,使得其中的变量免受其他循环的影响。但是如果拖得时间太长的话还是会强行刷新屏幕并趁机给其他的循环让路(大约一秒2次)。
不要将“在(...)秒内……”“……并等待”“等待……”这类的积木放入“运行时不刷新屏幕”的积木中,这些积木需要刷新屏幕后才能正常工作,否则只能等待强行刷新屏幕的机会判断,导致作品卡顿。
“询问(...)并等待”似乎不会造成卡顿,但是询问结束的一瞬间会卡一下,还是避免这样为好。

类似的,还有阿儿法营的“save [...] to [...]”和“load [...] from [...]”

2.11.1 画笔

画笔绘画的内容只有 480×360 的清晰度,且绘制的内容只在背景上方,无法覆盖任何显示的角色。

TurboWarp 高级设置中可以打开“高清画笔”功能。

图章会把角色当前的样子画到背景上,受显示特效的影响,包括颜色,扭曲和虚像特效。
笔的粗细的范围是1到1200。
画笔会按照角色的移动轨迹绘画。
落笔时,会触发一次绘制。每次角色移动都会触发一次绘制。在设置了画笔透明度后会看得更清楚。
如果不想触发落笔时的绘制,可以在落笔之前把透明度设为100,落笔后再恢复。(虽然还是触发了)

在阿儿法营里可以把落笔模式设为 no points,落笔时不触发绘制。

颜色、饱和度、亮度范围都是0到100。不是0到200或者-100到100。
颜色中可以放入变量和计算积木。具体参见2.6。

画笔是全局的,任何地方的“全部擦除”都会擦除一切角色和克隆体绘画的内容。
不要想着在背景使用画笔。画笔是要角色的。

2.11.2. 音乐

这一拓展不需要太多介绍。不过要注意,__使用“停止所有声音”,或者点击绿旗、停止后通过此拓展发出的声音不会停止。__
由于运行速度的问题,在有多个音乐同时演奏时,节拍不一定对的上。可能需要通过广播同步节拍。
演奏速度是每分钟的拍子数,在20到500之间。__是全局变量。__

2.11.3. Makey Makey

Makey Makey可以接收按键按下和按键序列。任何时候按下的按键触发了按键序列都会导致它触发。
那个Makey Makey检测按键和序列检测按键里面的括号都可以放入变量,其中,“当按下(...)键”的规则参见2.4“按键”一节。
这个积木和事件积木“当按下(...)键”有两个区别:一是可以放入变量和计算积木,二是,当按键被按住时,事件会连续触发。也就是说,如果积木后面的事件运行完之后按键还按着,事件会循环触发,直到按键松开为止。
按键序列被按下的规则:__up、down、left、right代表上下左右__,其它和2.4按键一节一样。每一个按键以空格分隔(空格用space),不区分大小写。例如“up down down 2 3 r w q”代表依次按下“上 下 下 2 3 r w q”之后触发。
这一积木只检测点击绿旗、停止后最后按下的几个键是不是这几个键。例如你把序列设为“1 1 1”,那么在按下2次1后,每一次按下1都会触发这个积木,因为最后三个按下的键是“1 1 1”,和列表相同。点击绿旗、停止会清空按下的按键的记录。
我没试过这个列表可以有多长,或许你可以试一下。

2.11.4. 其他拓展

好习惯:使用视频侦测拓展时,请在保存作品前把摄像头关闭,__因为摄像头的开关会被保存,当其他人在创作页打开你的作品时就会看到他们的脸。__
在在线创作的时候也要注意,__如果你在保存的时候没有关闭摄像头,你的脸可能会因此出现在作品封面上。__
文字朗读拓展和翻译拓展目前在国内不可用。
和硬件相关的积木,因为我没有硬件,所以这里不会介绍。
其他社区的拓展参见6.5

2.12 编辑器操作技巧

把积木拖到其它角色上面可以 跨角色 复制积木。
把造型拖到其它角色上面可以 跨角色 复制造型。
把声音拖到其它角色上面可以 跨角色 复制声音。
点击一组积木即可立即运行。
右键可以整理积木。
拖动滚动条可以快速卷页。
在积木上右键可以添加连接到积木的注释。可惜,整理积木后,这些注释会立即变得一团糟。
有的编辑器和社区支持书包功能,可以使用拖动的方式在书包里保存常用角色、积木、造型、声音。
可以通过右键删除的方式,删除一列积木中的单个积木。
你也可以按住退格键使用鼠标左键“射击”不需要的积木,这在整理积木给出一堆圆形积木的时候尤其有效。
__可以点击一段积木开头后用Ctrl+C复制积木,Ctrl+V粘贴积木,还能跨角色粘贴。__(不建议用Ctrl+X剪切积木,这很奇怪)
Ctrl+V会把积木粘贴在原来的积木所在的位置的右下方或者默认位置,__有可能不会在屏幕中立即出现__,建议去左上角附近看看。
按住Shift点击绿旗可以打开或者关闭加速模式。

Griffpatch 的插件 或者 TurboWarp 都会给复制粘贴的操作增加菜单。同时粘贴的积木会在鼠标指针上出现。

在手机上打开编辑器,点击输入数字的地方,会出现数字小键盘。
__可以在列表里拖动角色,造型,声音,改变他们的顺序。__(部分情况下需要点击停止键后才能正常拖动)

3-5 ...
6 ...
附录 ...


voyage200
1 声望0 粉丝