B1 · 第29集 · 5:07
Pyxel飞船移动控制
本集讲解如何用方向键控制飞船在屏幕内移动,并防止其越界。
来源:jmbarbier / peertube.solidev.net · 许可:CC BY-SA 4.0
字幕
Ça c'est pour le dessin du vaisseau.
这是用于绘制飞船的代码。
On peut déjà lancer notre code, vérifier si on a un vaisseau qui s'affiche.
我们现在就可以运行代码,检查飞船是否显示出来。
Et on a un vaisseau qui s'affiche en bas.
现在底部显示出了一个飞船。
Pensez à souvent lancer votre code plutôt que de faire des milliers de lignes et à
请记得经常运行代码,
la fin de vous rendre compte qu'il y a une grosse erreur que vous savez pas où.
而不是写完成千上行后,才发现有个严重错误,却不知错在哪里。
Donc on écrit.
所以我们来写代码。
dès qu'on a quelque chose qui peut fonctionner on le teste et on passe à la suite
只要写出能运行的部分,就立刻测试,然后继续下一步;
ensuite. Donc là je reviens sur mon code et maintenant l'idée c'est de faire la mise
接着,我回到代码中——现在目标是实现飞船的位置更新。
à jour du vaisseau.
更新飞船的位置。
Donc alors on va utiliser les touches de direction et dire voilà le vaisseau peut
我们将使用方向键,让飞船能向左、向右、向上、向下移动。
aller à gauche, à droite, en haut, en bas.
向左、向右、向上、向下移动。
Donc pour ça, on va vérifier si
为此,我们要检测
pixel. btn, donc on peut aller regarder qu'est- ce que c'est btn.
pixel.btn(像素按钮)函数是否被触发——我们可以查看btn的具体含义。
Renvoie vrai ou faux si la touche est enfoncée.
该函数返回true或false,表示按键是否被按下。
D'accord? Donc si la touche est enfoncée, true, sinon false.
明白了吗?按键按下时返回true,否则返回false。
Donc là, c'est ce que je vais utiliser.
所以,我接下来就要用这个函数。
Est- ce que la touche flèche à gauche?
当前是否按下了左方向键?
Donc pixel. Key.
即 pixel.key,
Left, la liste des touches, vous l'avez ici.
left(左),这是按键列表,您在这里可以看到。
Voilà, non, left.
看,不是‘left’吗?
Qui est left, up, down, right.
包括 left、up、down、right。
D'accord, donc vous avez toutes les touches qui sont ici: left,
好的,所有可用按键都在这里:left(左)、
right, up, down.
right(右)、up(上)、down(下)。
Donc si on appuie sur la touche de gauche, qu'est- ce qu'on va faire?
那么,当我们按下左方向键时,要做什么呢?
Il va falloir prendre, donc la gauche et la droite, c'est les X.
左右移动对应的是X坐标。
Il va falloir prendre ce Xv là.
得使用这个Xv变量。
Et le modifier.
并修改它。
Mais attention, la variable est en dehors de la fonction.
但注意,该变量在函数外部定义。
Donc pour que la fonction puisse modifier une variable qui est en dehors de la
因此,为了让函数能修改一个位于函数外部的变量,
fonction, on a vu qu'il fallait utiliser global.
我们之前学过,必须使用global关键字。
Donc c'est là qu'on va utiliser ce fameux global que je vous ai dit qui n'était pas
所以,这里就要用到我之前提到的那个global关键字——
terriblement bien, mais on n'a pas le choix.
它其实并不太理想,但我们别无选择。
On va dire global.
我们将写上global。
xv yv, ça dit que.
xv、yv,意思是:
Dans cette fonction, on a le droit d'utiliser xV et yV,
在此函数中,我们可以使用xV和yV,
voire même de les modifier, que quand on parle de xV, yV,
甚至可以修改它们;
il s'agit de ceux qui sont à l'extérieur de la fonction ici.
当我们提到xV、yV时,指的就是函数外部定义的那两个变量。
Donc qu'est- ce qu'on va faire si le bouton.
那么,如果按钮被按下,该怎么办?
est enfoncé, le pixel bouton gauche est enfoncé,
即鼠标左键被按下时,
on va aller vers la gauche.
角色将向左移动。
Donc c'est à dire on va enlever un, la gauche je vous
也就是说,x值要减1;
rappelle. C'est par ici,
我再提醒一下,左边是这个方向,
c'est. On va enlever des valeurs en x, donc passer de là à là,
也就是x值变小,
c'est faire x moins égal 1.
即执行‘x -= 1’。
Donc on va faire xv moins égal un.
所以我们写成‘xv -= 1’。
Alors, on peut déjà tester ça.
现在,我们就可以测试一下了。
Si j'appuie sur la touche gauche, ça fonctionne.
当我按下左方向键时,它确实有效。
Après, si j'appuie sur la touche droite,
接着,如果我按下右方向键,
il ne se passe rien puisque je ne l'ai pas programmé.
什么也不会发生,因为我还没编写相关代码。
Maintenant, ici, à un moment.
现在,在此处,某个时刻……
Je vais sortir de mon écran.
我要离开屏幕。
Donc là ici ce qu'on peut lui dire c'est on va essayer de lui interdire de sortir de
所以,这里我们可以告诉它:
l'écran. If. Donc là, j'enlève un.
我们将禁止它离开屏幕。如果……好,我删掉一个。
If xv devient inférieur à zéro,
如果xv小于零,
dans ce cas- là, xv.
那么此时,xv
devient égal à zéro.
就等于零。
Donc je lui interdis d'aller plus loin que le
因此,我禁止它
bord de l'écran.
越过屏幕边缘。
Donc ça c'est pour la gauche,
这是针对左边的处理,
et maintenant ce que je vais vous demander de faire, à vous de jouer.
接下来,请你们自己动手试试。
C'est de faire la même chose pour la gauche, la droite, le haut,
请同样处理左、右、上、下四个方向,
le bas, sachant que dans tous les cas,
注意,在所有情况下,
on va lui interdire de sortir de l'écran. Donc à droite, faire
我们都将禁止它离开屏幕。向右移动时,
attention à ce qu'il a une largeur.
请注意它的宽度。
Dans tous les cas, le carré doit rester à l'intérieur de l'écran.
总之,方块必须始终留在屏幕内。
Là ici, par exemple, je vais me déplacer à fond vers la gauche.
比如这里,我全力向左移动。
Vous voyez que Mon carré reste dans l'écran.
您看,我的方块仍留在屏幕内。
Quand je vais vouloir aller à droite, c'est la même chose, le max.
当我向右移动时,原理相同,只是取最大值。
où il puisse aller à droite, c'est quand le bord droit de mon carré de
它能向右移动的最大位置,
vaisseau touchera le bord droit de l'écran.
是飞船右侧边缘碰到屏幕右侧边缘时。
Le carré doit rester dans l'écran.
方块必须留在屏幕内。
Donc à vous de développer ça.
现在,请你们来编写这部分代码。
ici, if. Il va falloir en rajouter et mettre les bonnes conditions pour que mon
这里要添加一个if语句,
vaisseau ne sorte pas du tout.
并设置合适的条件,确保飞船完全不越界。
de l'écran, et là vous aurez un vaisseau qui peut se déplacer dans les quatre
这样,飞船就能在四个方向自由移动了;
dimensions, et il restera plus qu'à faire les astéroïdes, ce sera une autre vidéo.
接下来只需添加小行星——那将是另一期视频的内容。