A2 · 第12集 · 4:25
用Scratch制作射击游戏
本集讲解如何用Scratch创建子弹克隆体、设置移动与消失条件,并实现击中角色时的游戏结束效果。
来源:Montagne Vincent / tube-numerique-educatif.apps.education.fr · 许可:CC BY 4.0
字幕
Tout de suite, quand on clique sur le bouton vert, on cache.
立刻,点击绿色按钮时,就隐藏。
Mais ici, si je lance le jeu, du coup, les clones, ils sont cachés aussi.
但在这里,如果我启动游戏,那么克隆体也会被隐藏。
Donc ce qu'on va faire, c'est quand on commence par un clone,
所以我们要做的是:当从一个克隆体开始时,
on montre. Voilà, là je vois.
就显示出来。看,现在我看到了。
tout de suite apparaître les tirs.
立刻,子弹就出现了。
Alors maintenant, au lieu de répéter indéfiniment avancer de 10.
现在,我们不再无限重复‘前进10步’。
On va le répéter jusqu'à ce que le bord de l'écran soit touché.
改为重复执行,直到碰到屏幕边缘为止。
Donc ici, on va répéter jusqu'à.
所以这里,我们将重复执行,直到……
Et on va aller dans les capteurs et on a
我们进入传感器模块,这里有
ici le bord touché.
‘碰到边缘’这个选项。
Donc on va répéter jusqu'à ce que le bord soit touché.
因此,我们将重复执行,直到碰到边缘为止。
Donc on va relancer.
现在我们重新运行。
avec le nouveau script jusqu'à ce que le bord soit touché.
用新脚本运行,直到碰到边缘为止。
Donc ici, ce que je vois, c'est que les tirs restent visibles.
我注意到,子弹一直保持可见状态。
Donc une fois que le bord est touché, on va cacher les tirs.
所以一旦碰到边缘,我们就隐藏子弹。
Donc ici, les nouveaux tirs vont disparaître.
这样,新生成的子弹就会消失。
Comme ceci. Mais dans le jeu, je veux pas que les tirs passent à travers la
就像这样。但在游戏中,我不希望子弹穿过女巫,
sorcière, je veux que si la sorcière est touchée,
我希望只要碰到女巫,
alors ça disparaît ici.
就立刻在这里消失。
Donc je vais rajouter une condition.
所以我将添加一个条件判断。
Donc on a déjà le bord touché, si la sorcière est touchée aussi.
我们已有‘碰到边缘’,现在再加上‘碰到女巫’。
Donc on va répéter jusqu'à bord touché ou sorcière touchée.
因此,我们将重复执行,直到碰到边缘或碰到女巫为止。
Alors dans les opérateurs,
在运算符模块中,
je vais prendre la fonction ou,
我选择‘或’这个逻辑运算符,
et d'un côté, donc je mets la sorcière touchée, de l'autre côté,
一边放‘碰到女巫’,另一边,
je mets le bord touché.
放‘碰到边缘’。
Donc ici, je vois tout de suite, si la sorcière est touchée,
所以在这里,我马上就能看出,如果女巫被击中,
les tirs s'arrêtent.
射击就会停止。
Alors pour faire disparaître ceux qui sont restés tout à l'heure,
那么,要清除刚才剩下的那些子弹,
donc soit ça s'arrête quand le bord est touché,
要么碰到边缘时停止,
soit ça s'arrête quand la sorcière est touchée.
要么碰到女巫时停止。
Alors là, j'ai un script qui doit être complet pour le tir.
这里,我需要一个完整的射击脚本。
Donc j'ai le script du lutin initial.
这是初始角色的脚本。
Donc il est caché, on a réduit la taille, ça c'est son initialisation,
它被隐藏了,尺寸也已缩小——这是它的初始化设置,
et il est collé sur le vaisseau.
并且贴在飞船上了。
Ensuite, toutes les secondes, on crée un
接着,每隔一秒,我们创建一个
Et ce clone se dirige vers la sorcière.
这个克隆体则朝女巫移动。
Donc ce clone, il est montré, il se dirige vers la sorcière.
这个克隆体会显示出来,并朝女巫移动。
Il avance tant qu'il n'a pas touché la sorcière ou le bord,
它持续前进,直到碰到女巫或屏幕边缘,
et une fois qu'il a touché l'un ou l'autre, il est caché.
一旦碰到其中任一目标,它就会被隐藏。
On peut juste rajouter quelque chose pour le jeu, au lieu d'attendre une seconde,
我们还可以为游戏加点小变化:不固定等待一秒,
on va attendre par exemple entre une et trois secondes,
改为随机等待一到三秒,
ou entre zéro et trois secondes,
或者零到三秒之间,
comme ça on ne peut pas prévoir
这样玩家就无法预测,
quand le tir va être fait.
射击究竟会在何时发生。
Donc ici, là le jeu est un petit peu modifié.
所以这里,游戏做了一点修改。
Et on va rajouter un script sur la sorcière.
接下来,我们要给女巫添加一个脚本。
Maintenant, on va pouvoir dire que ce script que j'ai ici.
现在,我们可以把这个脚本用在这里。
On va le rajouter dans le répéter indéfiniment.
我们将把它放进‘重复执行’循环里。
Ce script va être fait lorsque le tir est touché.
这个脚本将在子弹被击中时运行。
Donc ici, dans contrôle, on va
所以,在‘控制’模块中,我们将
attendre que le tir soit touché.
等待子弹被击中的那一刻。
Donc je vais rajouter
因此,我将添加
une condition, si, pardon.
一个条件:如果……抱歉。
Si le tir est touché, s'il veut bien se rajouter,
如果子弹被击中,且它愿意重新添加自己,
je sais pas pourquoi il se rajoute pas au bon endroit.
我不知道它为什么没加到正确的位置。
Si le tir est touché, donc ici on va rajouter, c'est pas pointeur,
如果子弹被击中,那么这里我们要添加的不是‘指针’,
c'est tiré touché, alors la sorcière.
而是‘子弹被击中’,接着是女巫。
Voilà ce qui s'est passé à l'écran, et je
这就是屏幕上发生的情况,而我
stoppe tout, le jeu s'arrête.
立刻停止一切——游戏结束了。
Donc je recommence le jeu, cette fois j'ai terminé l'écriture de mes scripts.
现在我重新开始游戏,这次我已经写完了所有脚本。
Donc si la sorcière est touchée, il y a une pixellisation et le jeu s'arrête.
所以,一旦女巫被击中,画面就会像素化,游戏随即停止。
Voilà, donc gardez ce script ici qui est
好了,这个关于克隆体用法的脚本
très important sur l'utilisation des clones.
非常重要,请务必保留。
Dès qu'il y a un jeu de tir, on a besoin d'utiliser des clones,
只要涉及射击类游戏,我们就必须使用克隆体;
sinon il faudrait une infinité de lutins, ce qui n'est pas du tout gérable.
否则就得创建无数个角色,这完全不可行。
On peut juste rajouter une chose d'ailleurs que j'ai pas mis.
另外,其实我们还能再加一个小功能,我刚才没加上。
On peut changer de costume ici, le tir il a plein de costumes différents.
比如在这里切换子弹的造型,它有多个不同造型。
Donc ce que j'avais mis dans la vidéo
之前开头那段视频里,我提到过:
de départ tout à l'heure, c'est que j'allais au costume suivant avant de créer
我会先切换到下一个造型,再创建克隆体。
un clone. Comme ça, chaque tir a une couleur différente.
这样,每颗子弹颜色都不同。
Donc on peut rajouter évidemment toujours des choses sur un jeu.
当然,我们还可以继续为游戏添加各种新功能。
Voilà, ici on va changer de couleur à chaque fois le tir,
看,这里每次发射子弹时都会更换颜色,
et c'est donc la fin de ce script.
至此,这个脚本就全部完成了。
Cet épisode est terminé, ne manquez pas le prochain épisode dans lequel nous allons
本集到此结束,敬请期待下一集——
voir comment faire sauter un lutin.
我们将学习如何让角色跳跃!
À bientôt!
我们很快再见!