搜索

Scratch 教程

基本介绍

使用 Scratch 3 注册与登录 操作界面 我的东西

图形与声音

绘制造型&背景 编辑音效

程序积木

积木种类 动作 外观 音效 事件 控制 侦测 运算 变数 清单 函数积木

扩充功能

音乐 画笔 视频侦测 文字转语音 翻译

技巧&观念

全域变数、区域变数 深入理解区域变数 控制指定分身 控制所有分身的方法 云端变数 云端变数记录文字 变数串接文字 判断英文字母大小写 中断与停止程序 广播消息并等待 键盘与鼠标 鼠标点击与长按 侦测所有键盘按键 点击隐藏的角色 突破角色尺寸限制 角色与舞台边界 重复积木的等待时间 音乐暂停与继续播放 使用造型名称建立清单 使用造型代替变数 文字转清单 清单合并为文字 判断两个清单是否相同 复制清单、反转清单 清单数字排序 清单最大值最小值

入门范例

键盘控制猫咪 指向中间的箭头 水果音乐钢琴 猫咪的影分身之术 猫咪的细胞分裂 螃蟹跑来跑去 吃水果 摸蝴蝶 小狗追棒球 鱼儿水中游 小鸟往前飞 舞棍阿伯 小时钟 摇骰子 转动的眼球 抽奖轮盘 大乐透电脑选号 卡牌抽签 ( 20 中 1 ) 移动到边缘切换场景 人物依序跳舞 ( 广播 ) 按钮控制猫咪 ( 广播 )

进阶范例

猫咪跑步 ( 连续背景 ) 猫咪跑步 ( 超长背景 ) 大型数字 ( 图形数字 ) 拖拉怪兽碰撞墙壁 键盘钢琴 ( 记录音符 ) 中文字逐字稿 英文字逐字稿 计算机 1 ( 显示数字 ) 计算机 2 ( 加减乘除 ) 云端聊天室 音乐播放器 推猫咪 ( 视频侦测 ) 围捕小鱼 ( 视频侦测 ) 戳泡泡 ( 视频侦测 )

视觉特效范例

视差效果 水中吐泡泡 雪花随风飘 键盘钢琴 ( 音符动画 ) 无限循环画中画 水底探照灯 狙击望远镜 ( 两倍变焦 ) 猫咪万花筒 仙女棒 ( 光迹效果 ) 骇客任务背景特效 放烟火 1 ( 往上发射 ) 放烟火 2 ( 爆炸效果 )

绘图范例

镜射画图 ( 对称图形 ) 小画家 ( 舞台上画图 ) 记录画图轨迹 绘制圆形 绘制椭圆形 绘制立方体 ( 会动 ) 绘制正多边形 绘制正多角星形 ( 单纯 ) 绘制正多角星形 ( 多线 ) 绘制抛物线 绘制折线图 绘制圆饼图 绘制圆饼图 ( 指示线 ) 蜘蛛结网 ( 八边形网 ) 绘制舞台方格 绘制正弦波形 ( sin ) 正弦波毛毛虫动画 显示声波图形

物理&模拟范例

钟摆运动 简单磁铁效果 两个磁铁的磁力线 立体空间 ( 三度空间 ) 循迹移动 抛物线发射炮弹 地球绕着太阳转 弹跳的篮球 电风扇 ( 控制强度 ) 拉不走的弹力球 惯性移动 ( 鼠标 ) 惯性移动 ( 键盘 )

入门游戏范例

猴子接香蕉 打地鼠 打地鼠 ( 体感视频侦测 ) 刮刮乐 吹风机吹头发 太空狗闪躲陨石 九九乘法测验 英文单字测验 钓鱼游戏 拍西瓜 ( 储存最高分 ) 宝可梦猜猜我是谁 ( 基本 ) 形状配对拼图 台湾地图拼图 英文打字机 英文打字机 ( 判断大小写 ) 射击外星人 猜数字 ( 猜大小 ) 猜数字 ( 几 A 几 B ) 连连看 ( 产生器 ) 连连看

进阶游戏范例

青蛙过河 青蛙过马路 反弹球 ( 乒乓球 ) 打砖块 狙击气球 ( 两倍变焦 ) Flappy Bird Flappy Bird ( 声控版 ) 走迷宫 ( 基本 ) 大型迷宫 ( 键盘控制 ) 大型迷宫 ( 鼠标控制 ) 翻卡记忆游戏 翻卡记忆游戏 ( 改良版 ) 井字棋 ( 圈圈叉叉 ) 九宫格拼图 九宫格拼图 ( 改良版 ) 音阶记忆 贪吃蛇 ( 分身版 ) 贪吃蛇 ( 画笔版 ) 小鸡下楼梯 拉霸机

团康游戏范例

摇骰子 ( 1~3 个 ) 比手画脚 ( 猜动物 ) 音乐传球游戏 大声公 ( 比赛谁的气长 ) 抽签 ( 可调整中签数量 ) 转盘指针 ( 指到谁就当鬼 ) 倒数计时器 ( 基本版 ) 倒数计时器 ( 大数字版 )

游戏设计技巧

角色 ( 地上移动 ) 角色 ( 蹲下、左右转 ) 角色 ( 跳耀、两段跳 ) 角色 ( 墙壁、爬墙 ) 地图 ( 清单转换 ) 地图 ( 二维数组 ) 地图 ( 控制移动 ) 地图 ( 墙壁碰撞侦测 ) 地图 ( 吃东西侦测 ) 俄罗斯方块 ( 角色与背景 ) 俄罗斯方块 ( 移动与碰撞 ) 俄罗斯方块 ( 放置方块 ) 俄罗斯方块 ( 消除完成方块 ) 俄罗斯方块 ( 下个形状 )

深入理解区域变数

在“全域变数、区域变数”教学里已经认识了全域变数和区域变数的用法,这篇教学会针对“区域变数”进行更深入的介绍,透过灵活操作区域变数,就能让程序运作得更加有效率以及更有弹性。

请先阅读:全域变数、区域变数

快速导览:

定义区域变数名称

新增变数或清单时,只要勾选“仅适用当前角色”,就能够建立“区域变数”( 清单名称也属于变数的一种 )。

Scratch 教学 - 深入理解“区域变数” - 仅适用当前角色

不过如果只是单纯建立区域变数,在清单积木里“无法马上看出”变数是区域变数还是全域变数,以下图的例子而言,变数 a、b、c 里只有 b 是区域变数,清单 list 和 list2 的 list 是区域变数,但无法直接从名称区隔,只能从舞台里进行区分。

Scratch 教学 - 深入理解“区域变数”- 无法马上看出变数是区域变数还是全域变数

为了让开发程序更有效率,可以运用“命名”的方法,从变数名称进行全域变数和区域变数的区隔,常见的做法可以在变数前方加上“$”或“_”符号,或者直接加入“local”名称作为识别。

将识别符号加在名称前方,可以让区域变数在积木清单排序里“排在一起”,减少寻找时间与出错机会。

Scratch 教学 - 深入理解“区域变数”- 运用一些“命名”的方法区隔

区域变数的作用范围

变数的“作用范围”表示“可以在哪里读取这个变数的内容”,以“全域变数”而言,不论是任何角色、舞台、分身、函数,读取的变数内容都是“同一个”,因此只要变数在某个地方被更改内容,读取到的内容就会是新的数值,以下图为例,变数 a 是全域变数,执行后点击猫咪会将 a 增加 1,但点击螃蟹时,仍然会讲出目前变数 a 实际的数值,因为两个角色可以读取同一个变数。

Scratch 教学 - 深入理解“区域变数” - 变数的“作用范围”表示“可以在哪里读取这个变数的内容”

有别于全域变数,“区域变数”的作用范围仅止于“角色本身”,以下图为例,如果在猫咪角色建立了区域变数 $_a,螃蟹的积木清单里将看不到 $_a 变数,这表示区域变数 $_a 只有猫咪可以使用。

Scratch 教学 - 深入理解“区域变数” - “区域变数”的作用范围仅止于“角色本身”

区域变数作用的“角色”除了舞台上的不同角色,“不同分身”也属于“不同角色”,以下图为例,虽然本尊和分身都有使用名 $_a 区域变数,但因为 Scratch 的区域变数作用范围仅止于角色本身,所以分身和本尊的 $_a 数值并不相同,不同分身之间的 $_a 数值也不相同。

Scratch 教学 - 深入理解“区域变数” - “不同分身”也属于“不同角色”

独立事件:分身产生

延续上述区域变数的作用范围,将程序改成下图,执行后点击猫咪,本尊猫咪会讲 0,分身猫咪都会讲 1,这时可能会有个疑问:“为什么分身可以修改本尊的区域变数?”。

Scratch 教学 - 深入理解“区域变数”- 为什么分身可以修改本尊的区域变数?

会造成这个状况,是因为分身在一开始没有定义 $_a,为了定义 $_a 变数,程序逻辑会产生一个类似“变数 $_a 设为 $_a”的积木区块,所以会造成分身的 $_a 初始值与本尊相同的状况 ( 所以改变 1 之后就会从 0 变成 1 )。

Scratch 教学 - 深入理解“区域变数”- 分身在一开始没有定义区域变数

因为 Scratch 的区域变数定义原则,如果将“$_a 改变 1”的积木放在“本尊”的重复循环里,就会影响到每一个分身的 $_a 初始数值,以下图为例,产生的三个分身各自的 $_a 数值都不同。

Scratch 教学 - 深入理解“区域变数”- 会影响到每一个分身的区域变数初始数值

虽然可以顺利让不同分身具有不同区域变数数值,但“非常不建议”此用这种作法,因为如果在不同的作用范围里使用“相同区域变数名称”,非常容易搞错逻辑,未来在进行程序除错时也不容易处理,所以尽可能避免这种“相同名称”的做法。

如果要进行改良,可以仿照下图的模式,新增一个全域变数 n,当分身产生时将 n 增加 1,接着把分身各自的区域变数等于当下的 n,就能做到同样的效果,程序积木也更加容易的阅读和管理。

Scratch 教学 - 深入理解“区域变数”- 新增一个全域变数 n,当分身产生时将 n 增加 1

独立事件:点击角色

“点击角色”的事件属于个别角色的“独立事件”,因此如果将区域变数放在点击角色的积木里,该区域变数属于“被点击角色”的区域变数,以下图为例,本尊和分身各自拥有自己的区域变数 $_a,这个变数互不影响,当角色被点击时,只有将所属该角色的 $_a 的数值增加 1。

Scratch 教学 - 深入理解“区域变数”- 该区域变数属于“被点击角色”的区域变数

完成后执行程序,点击本尊和分身,就会讲出各自的数值,彼此之间不会互相影响。

Scratch 教学 - 深入理解“区域变数”- ,点击本尊和分身,就会讲出各自的数值

共用事件:键盘、广播、背景、响度

Scratch 里的“当键盘按下、当收到广播、当背景换成、当声音响度大于”这四个事件积木,属于共用事件的积木,只要共用事件发生时,角色的本尊和分身同时都会开始动作。

Scratch 教学 - 深入理解“区域变数”- 当键盘按下、当收到广播、当背景换成、当声音响度大于

以下图为例,如果将上述的程序码加入“当按下空白键时把 $_a 区域变数的数值增加 1”的程序区块。

Scratch 教学 - 深入理解“区域变数”- 将上述的程序码加入程序区块

程序执行后按下空白键,本尊和分身就会各自改变自己的区域变数数值,彼此之间不会互相影响。

Scratch 教学 - 深入理解“区域变数”- 本尊和分身就会各自改变自己的区域变数数值

函数里的区域变数

如果在函数里使用区域变数,这个区域变数等于“有使用函数”角色的区域变数,以下图为例,将点击角色的程序改用 test 函数。

Scratch 教学 - 深入理解“区域变数”- 这个区域变数等于“有使用函数”角色的区域变数

执行后点击角色,会发现点击本尊和分身时,会进行各自区域变数 $_a 的运算,彼此之间互不干扰。

Scratch 教学 - 深入理解“区域变数”- ,点击本尊和分身,就会讲出各自的数值

小结

“区域变数”是实作“进阶”Scratch 范例必备的技巧之一,透过熟练的操作区域变数,就能大幅减少程序积木的使用,也能让程序更加容易阅读和维护,是非常实用的高级技巧!

意见反馈

微信二维码 微信扫码关注 抖音二维码 抖音扫码关注