A2 · 第11集 · 4:34
用克隆功能实现射击
本集讲解如何在Scratch中用克隆功能实现自动射击,避免为每个子弹创建独立角色。
来源:Montagne Vincent / tube-numerique-educatif.apps.education.fr · 许可:CC BY 4.0
字幕
Coder un jeu avec Scratch, dixième épisode dans lequel nous allons voir comment
用Scratch编写一个游戏,这是第十集,我们将学习
créer un tir en utilisant les clones.
如何利用克隆体来创建射击效果。
Alors dans un jeu de tir, en général,
在射击类游戏中,通常
on veut qu'il y ait autant de tirs que possible.
我们希望射击次数尽可能多。
Alors si on devait avoir un lutin par tir,
如果每个射击都用一个角色来表示,
nous aurions quelque chose de tout à fait ingérable parce que nous aurions une
就会变得完全无法管理,因为我们需要
quantité énorme de lutins à gérer.
数量庞大的角色需要处理。
Donc ici, nous utilisons les clones,
因此,这里我们使用克隆体:
c'est- à- dire que nous avons un seul lutin et à chaque fois que l'on tire,
也就是说,我们只用一个角色,每次射击时,
donc ici à chaque fois que le vaisseau spatial tire par exemple,
比如每次飞船开火时,
on crée un clone du lutin qui sert de tir.
就创建一个用作子弹的克隆体。
Voilà, donc c'est ce que nous allons apprendre à faire avec Scratch et nous y allons
好了,这就是我们接下来要在Scratch中学习的内容,现在就开始吧!
tout de suite.
现在就开始吧!
Alors nous y voici, donc j'ai mes deux lutins,
好了,我们到了这里。我有两个角色:
le vaisseau spatial et la sorcière,
飞船和女巫。
les scripts sont ceux que nous avons déjà écrits dans un épisode précédent.
这些脚本是我们之前某集已经编写好的。
Donc pour la sorcière ici, j'ai l'initialisation ainsi que les déplacements avec les
对于女巫,我有初始化脚本,以及
touches du clavier.
用键盘按键控制移动的脚本。
J'ai rajouté un petit script qui pour le moment ne commence pas parce qu'on n'a pas
我还添加了一个小脚本,目前尚未启用,因为我们还暂不需要它;
encore. nécessaire, mais il s'agit d'un effet graphique,
它是一个图形特效脚本。
je peux le lancer pour voir ce que ça donne,
我可以手动运行一下,看看效果如何:
donc juste une pixelisation pour faire disparaître la sorcière lorsqu'elle aura été
就是让女巫被飞船击中后,
touchée par les tirs du vaisseau.
通过像素化效果消失。
Et pour le vaisseau, un script tout simple,
至于飞船,有一个非常简单的脚本:
une initialisation et puis il s'oriente en permanence vers la sorcière.
一个初始化脚本,然后它会持续朝向女巫旋转。
Donc si je lance le jeu, voilà ce qui se passe,
所以,如果我启动游戏,就会发生这样的情况:
il n'y a pas de tir pour le moment. Alors pour le tir,
目前还没有射击。那么,关于射击功能,
nous avons un seul lutin et c'est ça la difficulté et ça va être ça la force de
我们只用一个角色——这正是难点所在,
Scratch, c'est qu'on peut utiliser un seul lutin pour faire tous les tirs,
而这也正是Scratch的强大之处:
on n'a pas un lutin par tir, sinon il faudrait une infinité de lutins si on veut que
我们可以用同一个角色实现所有射击效果,
le jeu puisse ne jamais s'arrêter.
而不必为每次射击都创建一个新角色;否则,若想让游戏永不停止,就需要无限多个角色。
Donc ce que nous allons faire, c'est que déjà on va commencer un script,
接下来我们要做的是:先编写一个脚本,
quand le drapeau est cliqué, ce lutin nous allons le réduire,
当绿旗被点击时,将这个角色缩小,
déjà il est un petit peu trop gros ici,
因为它现在看起来有点太大了,
on va le montrer déjà.
我们先把它显示出来。
Pour voir où il est.
以便看清它的位置。
Donc le lutin ici, il n'est pas à sa taille réelle,
这个角色当前并非原始大小,
là je l'ai déjà réduit auparavant.
我之前已经把它缩小过了。
Donc on va le mettre à 50% de sa taille initiale,
因此,我们将它设为初始大小的50%,
et on va le faire aller
再让它移动到飞船位置,
sur le vaisseau.
停在飞船上。
Donc les tirs partent du vaisseau, donc voyons,
因为射击是从飞船发射的,所以我们来看一下:
on peut aller au pointeur de la souris, mais on peut aller aussi vers les lutins,
我们可以让角色移向鼠标指针,
on le fait aller sur le vaisseau.
也可以让它移向另一个角色——这里就让它移向飞船。
Donc là, quand je clique, hop, le lutin, il est sur le vaisseau,
看,当我点击时,角色立刻出现在飞船上,
ça va être le point de départ
这里将成为射击的起始点。
des tirs. Alors le tir, il va être
射击过程将是自动的,
automatique, ce n'est pas un tir, on peut le déclencher au clavier,
不是靠键盘触发的射击方式,
par exemple, dans un jeu de tir.
就像某些射击游戏中那样。
Ici, le tir va se faire automatiquement.
在这里,射击会自动进行。
Donc ce que l'on va faire, c'est qu'on va répéter indéfiniment.
因此,我们要做的就是无限重复执行以下操作。
créer, on va attendre une seconde, on va attendre
创建一个对象,然后等待一秒,再等待——
toutes les secondes pour faire un tir, donc on va attendre une seconde,
每秒发射一次子弹,所以我们先等待一秒,
et on va ici créer un clone.
接着在这里创建一个克隆体。
Donc ici dans les contrôles,
在‘控制’模块中,
je peux créer un clone de moi- même.
我可以创建一个自己的克隆体。
Alors un clone, ça va être un lutin identique qui va avoir un mouvement qui lui est
所谓克隆体,就是一个完全相同的角色,
propre. Donc on va créer un clone
拥有自己独立的运动方式。因此,我们将为子弹创建一个克隆体。
de la balle. Et ce clone, il va avoir un script pour lui.
而这个克隆体,将拥有专属的脚本。
Et ce script, il commence par l'événement" Quand je commence par un clone".
该脚本以‘当作为克隆体启动时’事件为起点。
Donc on crée le clone et le script de ce clone,
我们创建了克隆体,同时它的脚本,
il va être à part du script pour la balle ici.
将与这里子弹的原始脚本完全分开。
Donc quand je commence par un clone,
所以,当作为克隆体启动时,
comme un clone pardon, on va s'orienter vers la sorcière
抱歉,是‘当作为克隆体启动时’,我们将面向女巫,
et on va avancer.
然后向前移动。
Donc on se dirige vers la sorcière
我们朝向女巫,
et on va avancer, on va répéter indéfiniment.
并持续前进,不断重复执行。
Avancer. Donc on va voir ce que ça donne.
前进!现在来看看效果如何。
Donc quand je clique ici,
当我点击这里时,
voilà, j'ai un clone qui est créé et qui se dirige vers la sorcière,
看,一个克隆体被创建出来,并朝女巫移动,
puisqu'il est orienté vers la sorcière au moment où il est lancé.
因为它在被创建的瞬间就已面向女巫。
Alors plusieurs choses à corriger, ici on a encore beaucoup de choses à faire.
不过,目前还有不少问题需要修正。
Alors déjà quand il touche la sorcière, il se passe rien.
首先,当它碰到女巫时,什么反应也没有。
Donc on rajoutera ça après sur le script de la sorcière.
稍后我们将在女巫的脚本中添加这一功能。
Mais voyez, les tirs restent là contre le bord.
但请注意,这些子弹会一直停留在屏幕边缘。
Donc on va arrêter ça et on va rajouter quelque chose.
因此,我们将停止这个操作,并添加一些内容。
Déjà, la balle qui reste toujours sur le vaisseau ici, ça on va la cacher.
首先,这颗始终停留在飞船上的球,我们将把它隐藏起来。
Donc dans Apparence, on va cacher.
因此,在‘外观’选项中,我们将选择‘隐藏’。