A2 · 第2集 · 4:52
用Scratch控制角色方向
本集讲解如何用键盘方向键控制角色朝向和移动,包括基础方法和更流畅的循环检测法。
来源:Montagne Vincent / tube-numerique-educatif.apps.education.fr · 许可:CC BY 4.0
字幕
Coder un jeu avec Scratch, deuxième épisode dans lequel nous allons voir une
用Scratch编程制作游戏,第二集,我们将学习
deuxième méthode pour déplacer un lutin avec les touches du clavier.
用键盘按键移动角色的第二种方法。
Cette méthode sera beaucoup plus adaptée pour le déplacement d'un vaisseau spatial
这种方法更适合控制宇宙飞船
ou d'un bateau qui avance toujours droit devant eux,
或轮船等始终直线前进的物体,
mais qui s'oriente en tournant vers la gauche ou vers la droite dans la direction
但可通过向左或向右转向来调整前进方向,
dans laquelle ils veulent avancer.
以决定它要朝哪个方向前进。
Voilà, nous allons apprendre à coder ceci avec Scratch et nous y allons tout de
好了,接下来我们就用Scratch来学习如何编写这个程序,
suite. Alors nous voici maintenant avec Scratch.
现在马上开始!我们已经打开Scratch了。
Et donc pour faire avancer le bateau que j'ai ici droit devant lui et le faire
为了让画面中这艘船笔直向前行驶,
tourner à droite et à gauche, dans le menu mouvement,
并能向左、向右转向,
nous allons utiliser les trois premiers blocs.
我们在“运动”菜单中使用前三个积木块。
Le premier bloc" avancer" fait avancer le lutin droit devant lui.
第一个积木块“移动”让角色朝当前面向的方向前进。
Et ensuite nous avons les blocs" tourner à droite" et" tourner à gauche",
接着是“向右旋转”和“向左旋转”两个积木块,
ce sont les petites flèches qui nous indiquent le sens de la rotation,
小箭头图标表示旋转方向,
et on peut taper le nombre de degrés que l'on veut.
我们还可以输入想要旋转的角度数值。
Alors comme dans la première vidéo, nous allons utiliser les événements,
和第一期视频一样,我们仍会用到“事件”类积木,
à savoir quand une touche est pressée.
也就是“当按下某个键时”。
Alors par exemple quand la flèche haut est pressée,
例如,当按下向上箭头键时,
nous allons faire avancer le bateau.
我们就让船向前移动。
Ensuite quand la flèche droite est
当按下向右箭头键时,
pressée, nous allons le faire tourner vers la droite.
就让它向右转向。
Et quand la flèche gauche est pressée, nous le faisons tourner vers la gauche.
当按下向左箭头键时,则让它向左转向。
Et là j'ai un script qui est très simple, qui permet de diriger mon bateau,
现在我有一个非常简单的脚本,可以操控我的船:
donc je l'oriente comme je souhaite, et ensuite je peux le faire avancer.
我可以先调整它的朝向,再让它前进。
Donc ça fonctionne.
所以,它运行成功了!
Ici, il n'y a pas de problème de costume ou d'orientation comme on pouvait l'avoir
这里没有服装或朝向的问题,
dans la première vidéo avec des déplacements horizontaux ou verticaux.
就像第一段视频中水平或垂直移动时曾出现的那样。
Donc ici, j'ai un script qui fonctionne,
因此,我这里有一个能运行的脚本,
mais le mouvement n'est pas très fluide. Vous pouvez l'essayer,
但动作不够流畅。你可以试一试——
je ne peux pas appuyer par exemple sur deux touches à la fois.
例如,我无法同时按下两个键。
La deuxième touche que j'appuie annule l'effet
我按下的第二个键
de la première.
会取消第一个键的效果。
Donc on va essayer une méthode qui est peut- être un petit peu plus compliquée,
因此,我们将尝试一种或许稍复杂些的方法,
mais qui permet d'avoir des mouvements plus fluides.
但它能让动作更流畅。
Alors je vais arrêter, enlever ceci, et
现在我先停止运行,移除这部分,
on va faire démarrer le script quand le drapeau vert est cliqué cette fois.
然后改为点击绿旗时启动脚本。
Et nous allons utiliser un capteur.
接下来,我们将使用一个传感器。
Nous avons un capteur qui permet de tester si une touche du clavier a été
我们有一个键盘按键检测传感器,
appuyée, pressée, c'est ici.
用于检测某个键是否被按下,就在这里。
Donc je peux avoir la flèche gauche ou la flèche droite, par exemple,
比如,我可以选用左箭头键或右箭头键,
ici. Donc ça c'est un test.
就放在这里。这是一个条件判断。
Donc le test, pour l'utiliser, je dois aller dans le menu contrôle ici,
要使用这个判断,我需要进入‘控制’菜单,
et je vais utiliser une boucle si alors.
并选择‘如果…那么…’循环。
Si la flèche droite est pressée,
如果右箭头键被按下,
alors je vais tourner à droite de 15 degrés.
那么角色向右旋转15度。
Je vais faire pareil avec la flèche gauche, donc je vais dupliquer ça.
左箭头键也做同样处理,所以我将复制这一段。
Si la flèche gauche est pressée,
如果左箭头键被按下,
alors on va le faire tourner à gauche de 15 degrés. Et on va recommencer avec la
那么角色向左旋转15度。接着,我们再为上箭头键添加同样的逻辑,
flèche haute, et cette fois il faut le faire avancer de 10.
这次让它向前移动10步。
Alors ici, j'ai plusieurs conditions, j'ai
这里,我设置了多个条件,
trois tests conditionnels.
共三个条件判断。
Si la flèche droite est pressée, on fait tourner le bateau vers la droite,
如果按下右箭头键,船就会向右转,
si c'est la flèche gauche qui est pressée, il tourne vers la gauche,
如果按下左箭头键,船就向左转,
et si c'est la flèche haut, il avance de 10.
如果按下上箭头键,船就前进10个单位。
Mais tout ceci doit se répéter pendant toute la durée du jeu.
但所有这些操作必须在整个游戏过程中持续重复。
Donc si je le fais fonctionner comme ceci,
所以,如果我这样运行程序,
si j'appuie sur le drapeau vert et que j'essaye d'appuyer sur les touches,
点击绿色旗帜后尝试按方向键,
il ne se passe rien.
却什么都不会发生。
Parce que quand j'ai appuyé sur le drapeau vert, le script s'est lu une fois,
因为当我点击绿色旗帜时,脚本只执行了一次,
et quand j'ai appuyé sur le drapeau vert, aucune des flèches n'était pressée,
而当时没有任何箭头键被按下,
et donc il passe à la suite, il passe à la suite et il ne revient jamais.
于是程序直接跳到下一步,之后再也不会返回。
Donc ici dans le menu contrôle, on va répéter indéfiniment.
因此,在“控制”菜单中,我们要选择“重复执行”。
Donc j'ai une boucle ici répéter indéfiniment,
现在这里有一个‘重复执行’循环,
ce qui va me permettre de répéter ce script pendant toute la durée du jeu.
它能让这个脚本在整个游戏过程中不断重复运行。
Et cette fois, si je clique sur le drapeau,
这次,当我点击绿色旗帜时,
j'ai quelque chose qui fonctionne et j'ai un mouvement qui est beaucoup plus fluide.
程序就能正常运行,船的移动也流畅多了。
Ici, testez les deux scripts et vous verrez que cette.
请在这里测试两个脚本,你会看到这个——
Deuxième solution permet d'avoir des déplacements beaucoup plus fluides pour ce
第二种方案能让船的移动更加流畅。
bateau. Alors on aurait pu faire le même principe exactement sur la première vidéo
其实,我们完全可以用同样的方法处理第一段视频中的操作,
avec le mouvement latéral gauche, droite ou vertical
比如左右横向移动,或上下纵向移动,
en haut, en bas.
也就是向上、向下移动。
On aurait pu faire exactement de la même façon un
我们完全可以编写一个类似的脚本:
script qui permettait avec une boucle répétée indéfiniment et des tests
用‘重复执行’循环配合条件判断,
conditionnels si les touches sont pressées.
检测按键是否被按下。
Et aussi on aurait eu des mouvements plus fluides avec le lutin qui se déplace de
这样,角色就能更流畅地上下、左右移动了。
haut en bas et de droite à gauche.
(角色)在上下和左右方向上的移动都会更流畅。
Voilà, ce script et cet épisode sont terminés.
好了,这个脚本和这一集就到这里。
Ne ratez pas le prochain épisode dans lequel nous verrons les scripts
别错过下一集,我们将学习
d'initialisation absolument indispensables pour bien commencer son jeu.
那些绝对必不可少的初始化脚本,助你顺利开启游戏。
À bientôt.
我们很快再见!