← 第二阶段学习单元凡朴 · 土星老师的创作工坊

第二阶段 · 4/6 · UNIT 10

重复的动作:函数与循环

重新开始时,怎样把小院每一处都准备好?

为一组操作命名,用有限的for循环逐个恢复种子,并保持状态一致。

建议120分钟 · 可拆两次60分钟

今天要做成什么

本课参考工程已预留“收集一颗”按钮,暂未连接;仍用C键收集。下一单元亲手把按钮接通。

让一次重来同时恢复画面与数据,解释循环每一轮处理的是谁。

准备:Godot 4.6.1标准版、电脑与鼠标、纸笔和三颗种子或小积木。混龄结伴;没有电脑的孩子先参与预测、规则设计,再轮换实际操作。

下载起步工程下载参考完成工程

解压到不同文件夹,导入project.godot,打开main.tscn并运行。起步包保留上一单元能力,本课新行为还没有接好。单元07预置小院节点,先聚焦首次编码。可以将所学移回自己的农场,节点名称与路径需相应核对。

当前练习使用固定相机;收集是按键或按钮驱动的显示变化,开门是模型移动。可编辑工程需在电脑Godot中打开,手机页面用于阅读任务。

先预测,再动手

1. 玩乱小院再列清单

点亮灯、收两颗种子、尝试开门。请孩子列出重新开始时要恢复什么:计数、种子显示、灯、门的位置和门的状态。只改画面不改数字会怎样?

2. 给一组动作取名字

回看collect_seed、try_open_gate:定义函数是在准备一套动作,带括号调用才会执行。如果之前点灯只写在输入分支里,现在把$Lamp.visible = not $Lamp.visible移入新函数toggle_lamp(),输入分支改为调用toggle_lamp();参考起步工程已这样整理。再把重来的清单命名reset_yard,像给一段舞蹈取名。

3. 先手动重复,再用循环

先写$Seeds/Seed1.show()等三行,试一次。再替换成for seed in $Seeds.get_children():,缩进一行写seed.show()。seed是这一轮取到的节点名,可以换成item但要前后一致。

4. 完成完整重来

加入下面函数,在输入分支中让reset_yard动作(R)调用它。解释get_children只返回直接子节点;本工程Seeds的直接子节点全是可显示的三维种子,所以可以show。

5. 增加一颗验证价值

复制一颗种子到Seeds下,再运行并收集、重来;循环会覆盖新种子,不必多写一行show。保留required_seeds为3时,多一颗种子不改变门槛。

6. 测试两次重来

在半途按R,完成后按R,再空院按R。所有状态都应回到同一起点。不要写无退出条件的while循环来“不断等按键”;Godot会持续处理输入事件。

这一课读懂这一小段

farm.gd末尾追加函数;在_unhandled_input内新增reset_yard动作分支。这里恢复Gate到起步工程的Y=1.0;若自己改过初始位置,也同步调整。

func reset_yard() -> void:
	seeds = 0
	gate_open = false
	$Lamp.visible = false
	$Gate.position.y = 1.0
	for seed in $Seeds.get_children():
		seed.show()
	$HUD/Panel/Rows/Status.text = "小院准备好了,种子:0/" + str(total_seeds)

只改本课所需的部分。参考工程包含前面已经完成的功能,不要求一次重写整份脚本。遇到错误先读最上面一条,核对行号、名称与缩进。

做到这里,就值得分享

基础任务:让一次重来同时恢复画面与数据,解释循环每一轮处理的是谁。

可选挑战:在不改重来函数的情况下,新增一颗种子并验证它也能恢复。

留下证据:重来前后截图;一份“数据/画面”双列核对清单。

我预测____;实际发生____;我修改____;现在我能解释____。

卡住时检查这里

数字清零但种子没回来

核对show是否在for内部缩进,循环是否确实遍历Seeds的子节点。

门回去了但再也打不开

画面位置和gate_open都需要恢复。

重复重来后结果不一样

检查是否用+=移动门或累加计数;重来应设定明确初始值。

AI与英语,一起帮助理解

可以请AI解释某一行、提出两种测试情况,或比较预测与实际。先给出节点名称和错误原文,再核对建议;每次只改一处并亲自验证,不让AI替代整份作品的理解。

每个孩子从当天真实经历贡献3个英文单词,例如function · repeat · reset。共同回忆一个小事件,请AI协助组织短故事,再核对、读演或配图。另留15—20分钟,允许先用中文说明,不强塞所有词。

土星老师的备课提示

函数和循环各给一次纸面演练,中间分开尝试。先讲孩子已见过的函数,再讲有限遍历;递归、while和复杂参数留到以后。

建议时间安排
0—10分钟观察、演一演,先说预测
10—25分钟土星老师分段引入一个概念
25—50分钟第一轮操作,每次改一处
50—60分钟离屏休息;可在此拆成两次学习
60—80分钟完成基础任务,伙伴互助
80—90分钟离屏休息
90—110分钟试边界、换人试玩与修改
110—120分钟保存工程、解释变化与下一步

若基础任务未完成,下一次接着做;减少挑战,不挤掉休息。可在农场做简短离屏活动。保持每个孩子亲自操作的机会,大孩子通过解释与协助成长。课前打开起步与参考工程,确认键盘、窗口焦点和文件保存位置。

给家长:今天可以怎样聊

请孩子演示一次成功和一次未满足条件的情况,再问“你怎么知道它会这样?”关注解释、尝试和修改过程;允许借助提示和伙伴协助,不把打字速度当成学习能力。

接口参考

Godot输入 · Godot信号 · GDScript语言参考