A2 · 第7集 · 4:49
解决Scratch游戏问题
本集讲解如何修复Scratch游戏中角色初始化顺序、像素化过度和角色遮挡等问题。
来源:Montagne Vincent / tube-numerique-educatif.apps.education.fr · 许可:CC BY 4.0
字幕
Mais d'abord, pourquoi est- ce que maintenant si je reclique sur le drapeau vert,
但首先,为什么现在我再点一次绿旗,
le chat va réapparaître déjà pixelisé?
小猫就已经变成像素化了?
Parce que quand je clique sur le drapeau vert,
因为当我点击绿旗时,
le script va être lu très très rapidement, ce que je vous ai dit.
脚本会执行得非常非常快——我之前告诉过大家。
Et en fait, la souris n'aura pas eu le temps de retourner à sa position initiale,
实际上,鼠标还来不及回到初始位置,
parce qu'en fait, le script du chat va être lu un petit peu avant le script de la
因为小猫的脚本,
souris, un petit peu avant qu'elle retourne à sa position initiale.
会比鼠标脚本稍早一点运行,也就是在鼠标回到初始位置之前。
Donc en fait, le script a eu le temps de s'exécuter entièrement avant que la souris
所以实际上,整个脚本都执行完了,
retourne à sa position initiale.
鼠标才回到初始位置。
Je recommence, regardez, le chat là, il est déjà pixelisé.
我再试一次,你看,这只小猫已经像素化了。
Donc si je recommence, pareil.
所以如果我再试一次,结果还是一样。
Par contre, si je déplace le chat
但如果我们先移动一下小猫,
et que je recommence, là il apparaît bien parce que la position dans laquelle on a
再重新开始,它就能正常显示了,因为上一次游戏结束时,
terminé le jeu précédemment n'était pas cette position,
小猫所在的位置并不是这个位置,
donc la souris n'était pas sur lui.
所以鼠标当时并不在它上面。
Donc ce qu'on va faire ici, c'est qu'on va rajouter un petit temps d'attente.
因此,我们这里要加一个短暂的等待时间。
Alors je vais laisser une seconde, mais c'est pas la peine d'en laisser autant,
我先设为一秒,其实没必要这么久,
un dixième ou un centième de seconde suffirait.
十分之一秒或百分之一秒就足够了。
Et là, si je regarde ce qui se passe, quand je reclique sur le drapeau vert,
现在再看:当我再次点击绿旗时,
ah bah le chat est dans un état normal.
啊,小猫恢复成正常状态了!
Donc ici, on a un petit effet de temps
所以这里存在一个微小的时间差,
entre la lecture des scripts, le script du chat est lu très légèrement avant celui
两个脚本的执行顺序不同——小猫的脚本,
de la souris, et donc je dois laisser un petit temps d'attente avant d'exécuter ça.
会比鼠标的脚本略微提前执行,所以我需要加个短暂停顿,再运行它。
Alors maintenant, on va résoudre le deuxième problème,
接下来,我们来解决第二个问题:
qui est que la pixellisation se fait beaucoup trop,
像素化效果太强了,
le chat a disparu complètement. Donc ici, sur l'effet graphique,
小猫完全消失了。因此,在图形效果方面,
ce qu'on va faire, c'est qu'on va pas le répéter indéfiniment tant que c'est touché,
我们不采用‘只要碰到就无限重复’的方式,
on va rajouter un répéter dix fois, par exemple.
而是改为重复十次,比如这样。
ça va bien fonctionner.
这会运行得很好。
Et puis on va arrêter le script une fois que ça aura été fait dix fois.
然后,等执行十次后,我们就停止这个脚本。
On va voir ce que ça va faire.
我们来看看效果如何。
Donc j'ai pris ce bloc qui s'appelle" stop tout" par départ.
所以我选了这个叫“停止全部”的积木,放在起始处。
Alors" stop tout", on arrête tous les scripts,
所谓“停止全部”,就是停止所有脚本;
moi je veux arrêter juste ce script. Donc je le mets après avoir répété dix fois
而我只想停止当前这个脚本,所以把它放在“重复十次”之后;
ajouter 50, alors 50 ça va être un petit peu beaucoup, je vais mettre 20,
在“添加50”之后——不过50可能有点多,我改设为20;
à l'effet pixelisé, je vais stopper ce script, voyons ce qui se passe.
再加一个“像素化”特效,然后停止这个脚本,看看会发生什么。
Donc ici, voilà, alors le chat, on le voit plus du tout,
看这里:小猫完全看不见了,
il reste plus qu'un carré, alors peut- être que 20 c'est trop,
只剩下一个方块。也许20还是太大了;
après chacun fait comme il le souhaite à son goût,
每个人都可以按自己的喜好来调整;
donc je vais voir ici ce que ça donne.
我再来看看实际效果如何。
Donc voilà, on va laisser comme ça pour le moment.
好了,目前就先这样保持吧。
Alors, autre chose que j'aimerais modifier rapidement,
另外,我还想快速修改一点:
j'aimerais que la souris qui a mangé le chat se retrouve sur le chat et non pas
我希望那只吃了小猫的老鼠,显示在小猫上方,而不是
dessous. Donc je vais aller maintenant dans le script de la souris,
在它下方。所以现在我要进入老鼠的脚本;
et la première chose que je vais faire,
第一步,
c'est que je vais dans son initialisation, je vais la mettre au premier plan.
进入它的初始化部分,把它设为最上层。
Donc j'ici dans le menu Apparence,
在这里,“外观”菜单中,
j'ai un bloc" aller au premier plan" que je vais rajouter dans l'initialisation ici,
我找到“移到最前面”这个积木,加到初始化里;
et on va voir ce qui se passe maintenant si ça a changé quelque chose.
再看看这样改动后有没有变化。
Voilà, la souris est restée sur le chat.
看,老鼠现在一直显示在小猫上面了。
Alors on va faire exactement pareil pour la souris,
接下来,对老鼠也做完全相同的处理:
on va rajouter une condition" si alors", on va prendre le capteur
添加一个“如果……那么……”条件判断,
qui teste les contacts, on va voir cette fois- ci la souris a touché le chat,
选用检测接触的传感器,检查老鼠是否碰到了小猫;
et on va mettre ça dans la boucle" répéter indéfiniment" qu'on a déjà créée pour
再把这个判断放进我们已创建的“无限重复”循环里,
créer les mouvements du chat.
也就是控制小猫移动的那个循环。
Donc si le chat est touché, alors on va modifier la taille de la souris.
因此,如果猫被碰到,我们就修改老鼠的大小。
Alors on peut rajouter un effet graphique,
我们可以添加一个图形效果,
mais moi je vais ajouter 10 à la taille de la souris.
但我选择给老鼠的大小加10。
Et là, vous voyez, ce qui se passe, c'est que la souris,
现在您可以看到,老鼠会不断变大,
elle grossit tant que c'est possible.
直到无法再变大为止。
Alors on va faire pareil, on va limiter le nombre de fois où cela est exécuté.
接下来我们做同样的事:限制该操作的执行次数。
Donc on va répéter par exemple 10 fois ajouter 10 à la taille.
例如,重复执行10次‘给大小加10’。
Mais qu'est- ce qui se passe ici?
但这里会发生什么问题?
Ça va se répéter 10 fois, mais indéfiniment.
它会重复10次,却无限循环下去。
Donc ce que nous allons faire,
因此,我们的做法是:
c'est que nous allons stopper ce script une fois que ça aura été fait 10 fois.
在完成10次后,就停止这个脚本。
Donc ici, le bloc stop, je vais bloquer, je vais stopper, pardon,
这里的‘停止’积木,我将用来阻断——抱歉,是停止——
juste ce script.
仅这个脚本。
Donc après avoir répété dix fois ajouter dix à la taille, je stoppe ce script,
所以,在重复十次‘给大小加十’之后,我停止这个脚本,
et là normalement j'ai quelque chose qui fonctionne à peu près comme je voudrais.
这样,它就能基本按我的预期运行了。
Voilà, donc ici, j'ai rajouté une interaction entre le chat et la souris,
好了,这里我添加了猫和老鼠之间的互动,
et des effets graphiques.
以及图形效果。
Donc essayez les différents effets graphiques, vous verrez,
请尝试不同的图形效果,您会发现,
certains vous plairont plus que d'autres,
有些比另一些更合您心意;
en modifiant le nombre de fois que vous le répétez,
通过调整重复次数,
ou en modifiant la quantité que vous ajoutez à l'effet graphique.
或调整每次添加到图形效果中的数值。
Voilà, en tout cas ces scripts fonctionnent et sont complètement opérationnels.
总之,这些脚本都能正常运行,完全可用。
Cet épisode est terminé, ne ratez pas le prochain épisode dans lequel nous verrons
本集到此结束,下集别错过!我们将学习
comment ajouter de l'interaction entre le lutin et le décor dans lequel il évolue.
如何让角色与所处的背景产生互动。
À bientôt.
再见!