A2 · 第9集 · 6:28
Scratch中角色通信
本集讲解如何让Scratch中的角色(如猫、老鼠、狗和游戏结束文字)通过发送和接收消息来协同工作。
来源:Montagne Vincent / tube-numerique-educatif.apps.education.fr · 许可:CC BY 4.0
字幕
Coder un jeu avec Scratch, huitième épisode dans lequel nous allons voir que les
用Scratch编程制作游戏,第八集,我们将看到
lutins peuvent communiquer entre eux.
角色之间可以互相通信。
Alors par exemple, ici, dans le jeu du chat et de la souris,
例如,在这个‘猫抓老鼠’游戏中,
il y a deux lutins que vous ne voyez pas à l'écran et qui attendent que le chat ou
屏幕外有两个角色,它们正等待猫或
la souris leur envoie un message leur disant que la partie est terminée.
老鼠发送一条消息,告诉它们游戏已结束。
Lorsque le chat va être touché par la souris, il envoie un message à ce lutin,
当猫被老鼠碰到时,它会向这个角色——
le chien, et au lutin game over que vous voyez à l'écran ici.
蓝色的狗,以及屏幕上显示的‘游戏结束’角色。
Il envoie un message comme quoi la partie est terminée et que c'est le moment pour
它发送一条消息,说明游戏已结束,
eux de rentrer en scène.
是它们登场的时候了。
Donc nous allons voir comment ajouter ce genre de communication entre lutins avec
接下来,我们将学习如何在Scratch中添加这类角色间的通信,
Scratch et nous y allons tout de suite.
现在就马上开始吧!
Alors nous y voici.
好了,我们到了这里。
J'ai toujours le chat et la souris, mais j'ai rajouté donc deux lutins,
我仍然保留着猫和老鼠,但又添加了两个新角色:
le chien bleu ici et le texte game over qui est aussi un lutin.
这里的蓝色小狗,以及同样作为角色的‘游戏结束’文字。
Au niveau des scripts, j'ai toujours le script ici, je suis sur le chat,
在脚本方面,我仍保留着这些脚本——我现在选中的是猫,
donc j'ai son script de déplacement et puis j'ai son initialisation et ce qui se
所以有它的移动脚本、初始化脚本,
passe. de jeu, lorsque la souris touche le chat ou lorsque le chat touche la souris,
以及游戏运行时的逻辑:当老鼠碰到猫,或猫碰到老鼠时,
avec l'effet graphique.
还会触发一个图形特效。
Pour la souris, pareil, j'ai toujours les mêmes scripts avec son initialisation,
对于老鼠,也是一样,我仍保留着相同的脚本:初始化、
ses déplacements, la souris se déplace toute seule vers le chat,
移动——老鼠会自动朝猫移动,
on a déjà vu ça dans les épisodes précédents.
这点我们在前面几集中已经学过了。
Et qu'est- ce qui se passe quand elle touche le chat?
那么,当它碰到猫时会发生什么?
C'est la fin du jeu, donc il y a un effet graphique ici aussi.
游戏结束了,所以这里也会触发一个图形特效。
Ensuite, si je passe au chien, j'ai un script ici avec une initialisation,
再来看小狗,我为它编写了一个脚本,包含初始化部分,
donc un déplacement qui donne l'impression que le chien marche jusqu'au milieu de
也就是让它看起来像在朝屏幕中央行走的移动效果,
l'écran, et puis il bascule sur le costume qui lui donne l'air songeur.
然后切换到让它看起来若有所思的造型。
Alors je peux cliquer sur le script pour voir ce que ça donne.
那么,我可以点击该脚本,看看效果如何。
Voilà, il avance, et quand il arrive au centre,
看,它向前移动,到达中心时,
il s'arrête et il prend l'air songeur.
就会停下,并露出若有所思的表情。
Et ça, je veux que ça se passe à la fin du jeu.
而我希望这一幕发生在游戏结束时。
Donc vous voyez ici, j'ai pas mis quand est- ce que ce script va se dérouler,
您看,这里我还没设置这个脚本的触发时机,
donc là si je lance le jeu, le script ne va pas se dérouler.
因此,如果我现在启动游戏,脚本就不会执行。
Pareil pour le lutin Game Over, alors une petite initialisation.
“游戏结束”角色也是一样,先做一点初始化设置。
en réduisant la taille, et un effet de zoom en répétant 20 fois
先缩小尺寸,再通过重复20次操作,
l'agrandissement de la taille de 3.
每次将尺寸增大3个单位。
Et pareil, ce script- là ne sera jamais lancé tel quel,
同样,这个脚本目前不会自动运行,
puisque je n'ai pas mis à quelles conditions le script va se dérouler.
因为我还没设定它的触发条件。
Alors première chose, c'est quand je commence le jeu ici,
首先,当我在这里开始游戏时,
si je clique sur le drapeau vert, le chien et le game over sont au milieu du jeu,
如果点击绿色旗帜,狗和‘游戏结束’角色都会出现在屏幕中央,
et ça je ne veux pas, je veux qu'ils apparaissent une fois que la partie est
但这不是我想要的——我希望它们只在游戏结束后才出现。
terminée. Donc ce qu'on va commencer, c'est quand le drapeau vert est
所以,我们首先要做的,是当绿色旗帜被点击时,
cliqué, on va cacher le lutin game over, et on va faire pareil avec le chien.
隐藏‘游戏结束’角色,同时对狗角色也做同样处理。
Donc vous voyez, quand j'ai un script que je veux recopier vers un autre lutin,
您看,当我需要把一个脚本复制到另一个角色时,
j'ai juste à le prendre et à le faire glisser ici sur l'autre lutin.
只需把它拖拽到目标角色上即可。
Et maintenant, pour le chien, j'ai le même script.
现在,狗角色也拥有了同样的脚本。
Donc maintenant, quand je clique sur le drapeau vert, ils disparaissent.
所以,现在点击绿色旗帜时,它们就会消失。
Bon maintenant, je veux qu'ils réapparaissent et que les scripts se passent à un
好了,接下来我希望它们重新出现,
moment qui est la fin du jeu.
并且让相关脚本在游戏结束的那一刻运行。
Quand est- ce que la fin du jeu apparaît, devra se lancer,
那么,游戏结束的时刻该如何定义呢?
c'est quand le chat touche la souris et quand la souris touche le chat.
就是当猫碰到老鼠、老鼠也碰到猫的时候。
Donc ce qu'on va faire, c'est que nous allons créer un événement,
因此,我们要创建一个事件,
si je vais dans menu événement ici.
点击上方的‘事件’菜单即可。
à partir de messages.
来自消息。
Vous voyez les conditions auxquelles on peut faire démarrer les scripts.
您看到了脚本可以启动的条件。
Donc quand le drapeau vert est cliqué, ça on l'utilise tout le temps.
所以,当点击绿色旗帜时,这个我们一直都在使用。
Quand une touche du clavier est cliquée, ça on l'a déjà utilisé.
当按下键盘某个键时,这个我们之前已经用过了。
Quand un lutin est cliqué, quand on change d'arrière- plan par exemple,
当点击角色时,比如切换背景时,
quand le volume sonore dépasse un certain niveau, ou quand on reçoit un message.
当音量超过一定水平,或接收到消息时。
Et ça c'est très bien, c'est ce qu'on va utiliser.
这非常好,也正是我们要使用的功能。
Les lutins peuvent envoyer des messages aux autres lutins.
角色之间可以互相发送消息。
Alors ici, je vais faire envoyer un message par le petit chat,
这里,我将让小猫发送一条消息:
une fois qu'il aura été touché par la souris, il
一旦它被鼠标点击,
va attendre une seconde, l'effet graphique va se dérouler,
它会等待一秒,播放图形效果,
on attend une seconde et on va envoyer un message.
再等一秒,然后发送消息。
On va faire un nouveau message, je vais l'appeler"
我们将新建一个消息,我把它命名为
game over" ce message.
“游戏结束”。
Donc il va envoyer" game over" à tous les autres lutins.
它会向所有其他角色发送“游戏结束”消息。
Alors, maintenant, si je retourne sur le script du chien,
现在,如果我回到小狗的脚本,
quand il reçoit.
当它接收到……
Le message game over, on
‘游戏结束’消息时,
va dérouler ce script.
我们将运行这段脚本。
Pareil pour le texte game over, quand il reçoit le message game over,
文字“游戏结束”也一样:当它收到‘游戏结束’消息时,
on va dérouler ce texte.
我们将显示这段文字。
Donc si je regarde ce qui se passe maintenant,
那么,现在来看看会发生什么:
donc je vais faire perdre, voilà.
我来让它输掉——看,就是这样。
Donc le chat envoie le message au bout d'une seconde.
小猫会在一秒钟后发送消息。
Qu'est- ce qui se passe ici?
这里发生了什么?
Si vous avez observé, là le lutin ici,
如果您注意到了,这里的精灵,
je voyais qu'il bougeait.
我看到它在动。
J'ai caché le lutin quand on a cliqué sur le drapeau vert,
点击绿旗时,我把精灵隐藏了,
mais je ne l'ai pas montré une
但我没有在收到‘游戏结束’消息时,
fois qu'il reçoit le message game over.
让它显示出来。
Donc ici, je dois montrer le lutin,
所以这里,我需要让精灵显示出来,
alors on va le montrer après l'avoir mis à la bonne taille.
那就先把它调到合适大小,再显示。
Et ici, pour le chien, pareil,
至于狗的角色,也是一样,
on va montrer le lutin une fois qu'il sera à sa bonne position.
等它到达正确位置后,再显示出来。
Alors je recommence.
那我重新开始一下。
On va perdre la partie, voilà, le chien apparaît
我们输掉游戏了——看,狗出现了,
et le texte Game Over aussi apparaît.
‘游戏结束’的文字也同时显示出来了。
Alors je vais juste rajouter une petite chose,
接下来,我再加一个小功能:
c'est que je veux cacher la souris et le chat quand la partie est finie.
游戏结束后,我要把老鼠和猫都隐藏起来。
Donc je vais cacher ici.
所以我在这里添加隐藏操作。
Une fois qu'il aura envoyé le message Game Over.
等它发出‘游戏结束’消息之后。
Mais si je le cache ici, il ne faut pas oublier dans l'initialisation de le montrer,
但若在这里隐藏,别忘了初始化时要重新显示它,
ce qui était déjà présent ici.
而这一点之前已经设置好了。
Et pour la souris, pareil, je vais la cacher
对于老鼠,同样处理:我要把它隐藏起来,
une fois qu'elle aura.
等它完成……
On va la cacher une fois qu'elle recevra le message Game Over elle aussi,
等它也收到‘游戏结束’消息时,就隐藏老鼠,
donc quand elle reçoit le message Game Over, on cache la souris.
也就是说,收到该消息后,立即隐藏老鼠。
Donc si je lance maintenant le jeu, voilà, le chat s'est fait croquer,
现在运行游戏——看,猫被吃掉了,
il disparaît, la souris disparaît, le chien et le lutin Game Over apparaissent.
它消失了;老鼠也消失了;狗和‘游戏结束’精灵则显示出来。
Donc voilà comment faire communiquer entre des lutins,
这就是精灵之间互相通信的方法:
on envoie un message que les autres lutins reçoivent sous la forme d'un événement.
一个精灵发送消息,其他精灵以事件形式接收该消息。
Ce script est maintenant terminé.
这个脚本现在已经完成了。
Cet épisode est terminé, ne manquez pas le prochain épisode dans lequel nous verrons
本集到此结束,
comment utiliser le chronomètre qu'il y a dans Scratch.
请不要错过下一集,我们将学习如何使用Scratch中的计时器。
À bientôt.
我们很快再见!