资讯详情

Scratch运动模块18块积木拆解:坐标、键盘控制与反弹避坑

📅 2026/10/31 9:42:50 | 华诺云谱 👁 阅读
Scratch运动模块18块积木拆解:坐标、键盘控制与反弹避坑
暑假第二节课一个四年级的孩子举着手喊我“老师我的猫跑没了”我走过去看舞台中央空空荡荡角色列表里那只橘猫明明还在点开坐标一看x 坐标显示四千多。他把将 x 坐标增加 10塞进了重复执行里又忘了加停止条件几十秒的工夫那只猫已经在虚拟世界里跑出了屏幕几千公里。这件事之后我调整了课程顺序讲 Scratch第一节不讲角色、不讲造型先把运动模块这十八块积木掰开揉碎讲清楚。因为孩子所有的“我想让它动起来”的念头第一步都落在这一栏里。运动模块是 Scratch 里唯一直接操作“角色在哪里、朝哪边、怎么过去”的积木集合它把二维坐标系、角度、速度这些抽象概念包装成了可以拖拽的方块。这篇内容面向刚接触图形化编程的青少年、以及带孩子入门的家长和一线老师我会把坐标系的底层约定、十八块积木的分组逻辑、键盘控制的三种写法、“碰到边缘就反弹”的坑、克隆体运动的注意事项全部展开讲中间穿插我在课堂上真实见过的错误和修法。这是整套 Scratch 积木拆解的第一篇后面还会聊外观、声音、事件这些模块但运动模块是地基值得多花点时间。1. 运动模块真正的门槛不在积木在这三个隐藏设定很多孩子拖积木拖得很顺一遇到角色位置不对就卡住问题几乎从不出在积木本身而是出在 Scratch 舞台的三个隐藏约定上。这三件事教材里通常一句话带过但没搞明白后面所有运动都会变形。1.1 舞台是一张 480×360 的坐标纸原点在正中间Scratch 的舞台宽 480、高 360但坐标原点不在左上角而在正中心。x 轴从 -240 到 240向右为正y 轴从 -180 到 180向上为正。也就是说舞台左下角是 (-240, -180)右上角是 (240, 180)。角色当下的坐标指的是它造型中心点在坐标系里的位置不是角色的左上角也不是它的脚底。这个约定和很多图形软件的坐标系不一样图像处理、网页布局里常见的做法是原点在左上角、y 轴向下增长而 Scratch 跟数学课上的一致y 向上为正。孩子如果先接触过画图软件再来 Scratch很容易在这里拧巴。我的处理办法是不解释直接做实验让孩子把角色拖到舞台四个角每拖一次就在纸上记下 x、y 的读数四个角记完规律自己就浮出来了。这比你讲十分钟“横坐标纵坐标”有用得多。还有一个细节值得强调角色坐标反映的是当前造型的中心点位置。同一个角色切换到不同造型如果两个造型的中心点没对齐位置会在切换瞬间“跳”一下。这在做走路动画时特别明显后面第 5 节会展开。1.2 方向角的读数和量角器不是一个系统Scratch 的方向值范围是 -179 到 1800 度朝正上方90 度朝右180 度朝下-90 度朝左。它是以“正上方”为起点、顺时针增长的一套角度。而数学课上孩子学的是以“正右方”为起点、逆时针增长。两套系统的换算关系是数学角度 90 - Scratch 方向。为什么 Scratch 要这么设计因为角色造型默认是朝右的方向设成 90角色看起来就是正常的而 0 度朝上更接近罗盘的直觉。这个设计对已经学过角的孩子反而是个方便——顺时针转一圈正好是 0 到 180 再到 -180和钟表一致。但对还没学过角的二三年级孩子来说这就是一道实实在在的门槛。我在课堂上用一张圆形卡纸解决这个问题中间画个箭头四个方向分别写 0、90、180、-90让孩子用手转着玩。“右转 15 度”时卡纸上箭头往顺时针方向走“左转 15 度”就往反方向走。手转两圈比任何图解都管用。顺便说清一块关键积木的底层动作移动 10 步并不是“把 x 加上 10”而是沿着当前方向前进。它实际执行的是两个坐标同时变化x 坐标增加 10 × sin(方向) y 坐标增加 10 × cos(方向)方向是 0 时sin 是 0、cos 是 1所以角色纯向上走方向是 90 时sin 是 1、cos 是 0纯向右走。这条公式我一般只讲给五年级以上的孩子低年级只需要记住“移动是朝着角色脸朝的方向走”。1.3 造型中心点决定了角色“绕哪里转、算在哪”打开造型编辑器右上角有一个十字准星按钮点一下就能看到一个蓝色的十字——那就是造型中心点。默认位置通常是造型的几何中心但它是可以手动拖动的。这个点的位置会同时影响三件事角色的坐标读数、旋转时的支点、以及碰到判断时的包围范围。做“角色站在地面上”的游戏时中心点应该拖到脚底位置这样坐标 y 就等于地面高度判断“掉到地面没”会简单很多做“轮子转起来”的效果时中心点必须在轮轴位置否则轮子会绕着屏幕外的某一点甩出去。我见过最典型的翻车案例是一个孩子做了只小鸟想让它绕圈飞结果每次旋转小鸟都飞出舞台。原因就是他在造型编辑器里不小心把中心点拖到了画面角落角色旋转时就绕着那个远处的点画大圆。孩子以为是程序出了问题反复改积木改了半天也不对。这类问题排查起来最快的方法是把旋转方式临时设为任意旋转让角色转一圈看它绕哪个点转支点一目了然。2. 十八块积木不用死记按“改值方式”分成四组就通了运动栏里一共十八块积木包含三块圆角的状态报告积木。挨个讲孩子记不住我一般按“它怎么修改坐标”分成四组每组有一个统一的思维方式记住了组单块积木自然就懂了。2.1 绝对定位组直接告诉角色“你去哪儿”这一组的特点是不管之前在哪儿直接赋新值包括移到 x: y:、在 1 秒内滑行到 x: y:、将 x 坐标设为、将 y 坐标设为、面向 90 方向。理解这一组最好的类比是坐电梯绝对定位相当于在面板上按“8 楼”不管你现在在几楼电梯都会去 8 楼而相对位移相当于“再往上走 3 层”。前者适合做“回到起点”“传送到某个位置”“复位”这类操作后者适合做持续移动。这里有个高频困惑将 x 坐标设为和将 x 坐标增加长得像效果天差地别。把“设为 10”放进重复执行角色会死死钉在 x10 这条竖线上看起来像卡住了把“增加 10”放进重复执行角色会一直往右跑。孩子分不清这两块就会出现“我的角色不动了”和“我的角色跑飞了”两种经典现象而且往往是同一节课上同时出现。2.2 相对位移组在当前位置上“再加一点”包括移动 10 步、将 x 坐标增加 10、将 y 坐标增加 10、右转 15 度、左转 15 度。这一组的共同点是“以当前状态为基准做增量”天然适合放在循环里做连续运动。这组积木里最值得反复强调的是移动步数和坐标增加的区别。很多孩子做键盘控制时习惯写“按下右键 → 将 x 坐标增加 10”运行起来角色确实往右走了但它是“横着平移”过去的——脸还朝着原来的方向甚至可能朝左却往右滑。这在做赛车、飞机、小人走路时特别出戏。正确写法是“面向 90 方向 → 移动 10 步”角色会先转过去再走。这个细节我在第 3 节会详细展开。另外移动步数是可以填负数的填 -10 相当于后退 10 步。这个用法在“角色边后退边发射”的场景里很好用但孩子第一次看到负数会懵得提示一句“负号就是反方向”。2.3 朝向组方向和显示是两码事朝向相关的积木有三块面向 90 方向、面向 鼠标指针/其他角色、将旋转方式设为 左右翻转/任意旋转/不旋转。前两块改的是角色的方向数值第三块改的是角色的显示方式它完全不影响位置和方向数值只影响造型被画出来的样子。这是整个运动模块里最容易被成年人误解的一块。具体表现是旋转方式设成“左右翻转”后角色朝左走方向 -90造型会自动做水平镜像看起来还是正着走设成“任意旋转”后角色朝左走整个造型会倒转 180 度猫会四脚朝天。设成“不旋转”则无论方向是多少造型永远保持原来的朝向只有位置在变。所以做横版闯关游戏主角几乎一定要设成左右翻转做飞机、赛车这种会朝各个方向的用任意旋转做需要保持正立、只改变位置的比如掉落的方块用不旋转。这三者选错的视觉效果差异极大但排查起来又特别快我在课堂上遇到“角色倒着走”第一反应永远是先看旋转方式。2.4 状态报告与碰撞组只读的圆角和唯一的物理积木三块圆角积木——x 坐标、y 坐标、方向——只能读取不能写入它们本身不产生任何动作但配合如果……那么和说就能做各种判断和调试。我在课堂上有个习惯只要孩子说“我的角色位置不对”第一件事就是让他加一块“说 (x坐标) (y坐标)”把数字念出来主观感觉立刻变成客观数据。碰到边缘就反弹是这一栏里唯一带“物理感”的积木也是坑最多的积木。分组代表积木修改方式典型场景绝对定位移到 x:y、将x设为直接赋值复位、传送、开场动画相对位移移动10步、将x增加增量累加循环运动、键盘控制朝向面向、旋转方式改方向或改显示转向、翻转效果状态与碰撞x坐标、碰到边缘就反弹读取或触发事件调试、边界处理3. 键盘控制角色移动值得反复重写的三个版本如果只做一个练习来消化运动模块我推荐键盘控制角色移动。它用到的积木不多但每一次改写都能暴露一类新问题是性价比最高的练手项目。3.1 第一版四个按键四段脚本最直接的写法是四段几乎相同的脚本当按下右键→面向 90 方向→移动 10 步当按下左键→面向 -90 方向→移动 10 步上下同理。孩子通常五分钟就能搭完然后兴高采烈地按键看到角色在舞台上移动成就感拉满。这一版要重点表扬也要重点追问“为什么是面向再加移动而不是直接把 x 坐标增加 10”让孩子自己把两种写法都试一遍对比角色在“朝左站”的时候按右键的效果。他会亲眼看到坐标增加版本是横着滑过去的而面向版本是转身走的。这个对比实验比讲十遍原理有效。不过这一版有个隐蔽问题按下键只触发一次移动角色动一下停一下快慢完全取决于操作系统的按键重复速率不同电脑上表现不一样有的孩子在自己电脑上很流畅换到教室的机器上就变成一格一格挪。这不是程序错了是触发机制的问题。3.2 第二版用侦测和循环做持续移动要摆脱对按键重复速率的依赖就得把“按键”从触发器改成状态。做法是不用“当按下右键”这个帽子积木改用侦测里的圆角积木按下 右键 键?配合一个重复执行当绿旗被点击→重复执行→如果 按下右键? 那么 面向 90 方向、移动 10 步同样的结构再写三段对应左、上、下这样只要键按住不放每一帧都会执行一次移动速度稳定而且可以精确调节。这一版还有个好处能同时处理多个按键按住上再按右角色会斜着走。当然斜着走会带来新问题——水平速度 10、垂直速度 10合速度是 10×1.414斜向比直向快大约 40%。正经游戏引擎会做向量归一化Scratch 里孩子没必要搞这么复杂我的做法是斜向时把步数改成 7肉眼几乎看不出差异。3.3 第三版抽成自制积木为后续扩展留门四段脚本重复了三块积木改速度要改四个地方这是典型的坏味道。Scratch 的自制积木我的积木→制作一个积木可以解决这个问题定义一个叫“移动”的积木带一个参数“步数”里面就放“移动 (步数) 步”。四段脚本各调用一次以后想调节速度只改变量值就行。再往前一步可以引入一个“速度”变量在绿旗点击时设为 8四段脚本里都写“移动 速度”。这样以后做“加速道具”“减速陷阱”时改一个变量就够了不用碰主逻辑。我在课上会特意留这个伏笔等后面讲变量模块时再回来看孩子会有“原来当时是这么用的”的顿悟感。顺便提醒一个边界问题这一版默认角色可以跑到舞台外面去。加限制很简单如果 x 坐标 230将 x 坐标设为 230如果 x 坐标 -230将 x 坐标设为 -230y 方向同理阈值取 168 左右要按角色大小调整。为什么不用 240 和 180因为那是舞台边缘角色有宽度坐标跑到 240 时角色已经有一半在屏幕外了。这个“阈值要比边缘小一点”的经验孩子自己试两次就能体会到。4. “碰到边缘就反弹”看起来最省事实际上坑最深这块积木只有六个字功能描述也简单角色碰到舞台边缘就转向。但它有两个容易被忽略的行为边界不理解这两点做出来的弹球游戏一定会在角落里抽风。4.1 它只认舞台边缘且只改方向不改位置第一个边界它只对舞台的四条边缘生效碰到别的角色、碰到画出来的线条都不会触发反弹。想让角色碰到另一个角色反弹得自己写判断如果碰到角色 2那么右转 180 度或者用方向取反的方式处理。这一点书上很少强调孩子做完“打砖块”发现球穿过挡板八成就是误以为这块积木管所有碰撞。第二个边界它改的是方向数值不会把角色推回舞台内。反弹的规则是方向镜像——撞到左右边缘时方向变成原来的相反数撞到上下边缘时方向变成 180 减去原方向。这个规则本身是对的但它没有改变角色的坐标如果角色在这一帧已经有一部分跑到边缘外下一帧它仍然“碰到边缘”就会再反弹一次。4.2 角落抖动的完整排查链路我记录一次真实的排查过程因为这类问题几乎每个班都会出现一次。现象是孩子做的弹球在舞台右上角停住了不停地高频抖动看着像卡住了。他第一反应是“积木坏了”第二反应是把反弹积木删掉重拖当然没用。第一步我让他加一块“说 (x坐标) (y坐标)”一起看数字。屏幕上清清楚楚显示 x 在 236 附近来回跳y 在 176 附近来回跳——这说明角色确实还在“碰到边缘”的状态里。第二步判断触发频率。让他把“右转 15 度”临时插到反弹积木后面抖动变成了明显的左右摇摆。这证明反弹在每一帧都被触发方向在两个值之间反复翻转。第三步定位根因。角色右上方那一块已经越过边缘反弹只把方向翻转过来但位置没挪回去下一帧它依然紧贴边缘于是再翻转。在角落处水平边缘和垂直边缘同时接触两个方向的翻转相互叠加方向就在两个值之间打转表现出来就是原地抖。第四步修。有两种改法。省事的改法是反弹之后加一句坐标钳制如果 x 坐标 232将 x 坐标设为 232如果 y 坐标 172将 y 坐标设为 172让角色被“推回”舞台内侧一两个像素脱离接触状态。彻底的改法是干脆不用这块积木自己写边界判断见下一小节。第五步验证。让他把角色手动拖到四个角各观察十秒钟看有没有残留抖动。这一步不能省很多孩子改完看到中间正常就以为好了其实问题只在角落复现。我把这个过程完整走一遍给孩子看目的不是让他记住修法而是让他记住这套动作先看数值再看触发频率再想根因最后验证。这套动作以后遇到任何“运动不对劲”都能用。4.3 自己写边界反弹多写几行换来可控如果项目里需要更精确的控制比如反弹时要减速、要播个音效、要统计反弹次数那自己写判断更划算。逻辑分两部分x 方向和 y 方向各一组如果 x 坐标 232 或 x 坐标 -232那么将方向设为 (0 - 方向)将 x 坐标设为 232 或 -232如果 y 坐标 172 或 y 坐标 -172那么将方向设为 (180 - 方向)将 y 坐标设为 172 或 -172这两条公式看起来像玄学其实推导很直接。Scratch 里角色沿方向 d 移动时x 的增量正比于 sin(d)y 的增量正比于 cos(d)。撞到左右边缘希望 x 的方向反过来、y 不变那就要让 sin(d) -sin(d)对应的就是 d -d撞到上下边缘希望 y 反过来、x 不变那就要 cos(d) -cos(d)对应 d 180 - d。给五六年级的孩子讲这个推导其实就是一次很自然的三角函数启蒙。用自己写的版本还有个附带好处可以在反弹时加一句“播放音效 弹跳”或者在变量里累加反弹次数做“打砖块”的计分就顺手多了。原生的反弹积木做不到这些因为它不给你插手的时机。5. 滑行、跟随与克隆让运动看起来“有生命感”积木搭得对角色能动但动得生硬。从“能动”到“像活的”中间隔着几块积木的用法细节这部分内容通常在入门教材里被跳过但它恰恰是孩子作品能否惊艳的关键。5.1 “在 1 秒内滑行到”的时长并不精确这块积木的语义是“用 1 秒时间平滑地移动到目标坐标”实际实现是每帧插值一次位置所以它的真实时长受帧率影响。在性能吃紧的项目里比如同时有一百个克隆体1 秒可能拖成 1.5 秒。做精确计时的项目不能依赖它。另一个要注意的是它会被打断。滑行过程中如果另一段脚本执行了“移到 x:y”滑行中途就废了角色瞬间跳过去。所以做开场动画时我建议把滑行放在绿旗点击后的主脚本里顺序执行不要和别的事件脚本同时改同一个角色的坐标。如果确实需要并行可以用“等待 1 秒”来卡时间点虽然不精确但比自己算帧数靠谱。还有个小技巧滑行积木的秒数填 0效果等价于瞬间“移到”但它是渐变的最后一个特例孩子有时候用它来统一写法也没问题。5.2 追踪效果的关键是加一个“距离阈值”“面向 鼠标指针”加上“移动 5 步”放在重复执行里就是一个最经典的追踪效果角色会一直追着鼠标跑。但直接这么写角色贴到鼠标上之后会开始高频抖动因为每帧它都先转向前方再走 5 步走过去又超过了然后再转回来。修法很简单加一个距离判断如果 到 鼠标指针 的距离 30才执行面向加移动。侦测里就有到 鼠标指针 的距离这块圆角积木直接用就行。30 这个数字按角色大小调大致等于角色宽度的一半比较自然。这个“加阈值防抖”的思路可以迁移到很多地方角色跟着另一个角色走、摄像机跟随、敌人追击玩家全都适用。我在课上会专门拎出来讲一次因为它是“从能用变成好用”的第一个分水岭。5.3 克隆体各有各的位置但要自己管好自己克隆出来的角色是独立副本有自己的坐标、方向、造型、大小。这一点很多人一开始没意识到以为克隆体共享位置结果做出来的拖尾效果所有影子叠在一起。做拖尾或粒子的标准写法是本体隐藏重复执行里克隆自己克隆体启动时先移到本体位置然后进入一段自己的循环——每次移动一点点、把大小缩小一点、把虚像增加一点重复十几次之后删除此克隆体。这里的关键是最后一定要“删除此克隆体”否则克隆体数量会一直涨Scratch 的上限是 300 个到顶之后新的就克隆不出来了表现为“特效突然停了”。这个上限我在课上会反复强调因为它引发的问题特别隐蔽。克隆体的运动还有一个容易忽略的点克隆体启动时执行的那段脚本只属于这个克隆体。所以如果你在克隆体里写“移动 10 步”每个克隆体都各自往前走互不干扰。利用这一点可以做一群各自游动的小鱼、一片随机飘落的雪花比用一个角色反复切换位置自然得多。5.4 进阶玩法用正弦函数做波浪运动想让气球上下漂浮、水母一伸一缩可以用“运算”里的 sin 积木。做法是固定 x 坐标让 y 坐标按正弦规律变化重复执行将 角度 增加 5将 y 坐标设为 (起始 y 振幅 × sin(角度))角度用变量自己累加5 度一帧转一圈 72 帧大约一秒多一个完整周期。振幅决定漂浮的高度差起始 y 决定漂浮的中心位置。sin 积木的参数是角度制这一点和数学课一致不用担心换算。这块内容属于拓展不适合第一次课讲但作为“学完之后还能玩什么”的引子特别好用。孩子看到自己的气球真的像在水里一样上下浮动那种兴奋感是单纯移动积木给不了的。6. 我在课堂上踩过的坑以及孩子们真实的卡点带了这么多轮入门课有些问题年年出现几乎可以当作固定考点。把它们整理出来比讲更多新积木有用。6.1 角色“倒着走”和“横着滑”是同一类错误这两个现象看着不一样根因是同一个方向数值和造型显示没对上。倒着走通常是旋转方式设成了“任意旋转”角色明明往左走造型却翻转了 180 度猫四脚朝天横着滑是用坐标增加的写法代替了面向加移动角色的方向从来没变过。修法分两步走先确认旋转方式是不是“左右翻转”横版游戏几乎都用这个再确认移动逻辑有没有用“面向”。我在课上会让孩子做一个自检口诀——“先看旋转方式再看有没有面向”两秒钟能定位八成的显示问题。还有一个更隐蔽的变体孩子把造型中心点拖偏了角色看着朝右实际方向读数是 90但造型画出来的箭头偏了 45 度于是“明明面向 90 却在斜着走”。这种问题只能靠打开造型编辑器看十字位置来确认。6.2 教坐标系别动嘴用一张方格纸坐标是抽象的孩子盯着屏幕上的数字很难建立空间感。我的做法是每人发一张画好方格的纸中间标 0四个方向标上 240、-240、180、-180然后让他们在纸上画自己的角色写坐标再回到 Scratch 里拖到对应位置看对不对。这个活动十分钟效果抵得上一节课。特别是“负坐标”这个概念纸上一看就懂——往左走、往下走数字就带负号。等孩子把纸和屏幕对上号后面再讲“如果 x 坐标 230 就夹住”这种逻辑他脑子里是有画面的不是背公式。我还会让他们做一个“坐标寻宝”的小练习老师说一个坐标孩子把角色拖过去看谁快。三五个回合下来坐标系基本就长在脑子里了。6.3 “先移动还是先判断”决定了角色会不会穿墙这是顺序问题也是初学者最难自己发现的问题。孩子做一个“不能穿过墙壁”的角色写法往往是先移动 10 步再判断有没有碰到墙碰到了就退回。看着合理实际运行起来角色会陷进墙里一点点甚至直接穿过去。原因在于移动步数决定了“每帧走多远”。如果一帧走 10 像素墙的判定又只在移动之后做一次角色完全可能在这一帧里跨过一条窄墙——移动前在墙这边移动后在墙那边中间那一段从没被检测到。步数越大、墙越薄穿墙越容易。修法有两个方向一是减小单步位移把“移动 10 步”拆成十次“移动 1 步”再加判断代价是性能二是改成移动前判断先算出下一格会不会撞不会才走。低年级孩子用第一种就够了高年级可以引导他们理解“离散检测”和“连续检测”的差别这已经是正经的游戏开发概念了。6.4 留给孩子的三个小挑战课讲完我一般会留三个难度递进的小任务让孩子自己折腾第一个让角色跟着鼠标走但保持 40 像素的距离不贴脸。考的是距离判断和阈值思维。第二个做一只在舞台里自动巡逻的小甲虫碰到边缘要转身但不能在角落抖动。考的是反弹积木的边界和坐标钳制。第三个做一条跟着主角走的拖尾主角移动时留下一串逐渐变小的影子。考的是克隆体的独立状态和生命周期管理。这三个任务都不长但每一个都能把当天讲的知识点串起来用一遍。做不出来的地方就是下次课要重点讲的地方。我个人在实际操作中的体会是运动模块这十八块积木讲完只需要半小时但真正用顺需要反复摔跟头。孩子第一次遇到角色跑飞、第一次遇到角落抖、第一次遇到穿墙这些时刻才是学习真正发生的地方。老师能做的不是提前把所有坑填平而是在他自己绕不出来的时候递上一句“你先让它把坐标说出来看看”。这个习惯一旦养成后面学任何模块都受用。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑