B1 · 第28集 · 5:11
用Pyxel制作太空飞船
本集讲解如何用Python和Pyxel创建可移动的太空飞船,包括变量定义、函数拆分及绘制矩形飞船。
来源:jmbarbier / peertube.solidev.net · 许可:CC BY-SA 4.0
字幕
Donc si je reviens vers le code,
因此,如果我回到代码中,
on va pouvoir maintenant personnaliser un petit peu ces choses- là.
现在我们就能稍微自定义一下这些内容了。
Donc là, je veux plus de mon rectangle.
这里,我想要一个更大的矩形。
Et le kit, on peut le garder, mais il sert pas à grand chose ici.
而这个工具包我们可以保留,但在此处用处不大。
Nous ce qu'on va vouloir faire, c'est d'avoir des personnages,
我们真正想实现的是添加角色,
donc on va vouloir un vaisseau spatial qui va se déplacer sur l'écran.
也就是一个能在屏幕上移动的太空飞船。
Donc pour ça. J'ai besoin d'avoir les positions
为此,我需要获取
de mon vaisseau spatial.
我的太空飞船的位置。
Je vais créer des variables x.
我将创建变量 x 和 y。
v est égal alors au début je vais le mettre à peu près au milieu donc si je veux le
v 的初始值设为
mettre à peu près au milieu en x on va dire cent soixante
大约屏幕中央的横坐标,即 160 除以 2,
divisé par deux ça nous fait dans les
结果约为
quatre- vingts et yv,
80;yv 的值
on va le mettre plutôt en bas, donc plutôt en bas,
我们把它放在靠下的位置,
on va dire plutôt dans les 100. Et
比如设为 100 左右。
ici, cette variable va contenir
这个变量将存储
la position en X et en Y de mon vaisseau.
飞船在 X 轴和 Y 轴上的位置。
Et maintenant, il va falloir que dans les fonctions update et dans les fonctions
接下来,在 update 函数和 draw 函数中,
draw, je m'occupe de dessiner un vaisseau spatial.
我需要负责绘制这艘太空飞船。
Alors je vais pas tout faire dans une énorme fonction update et une énorme fonction
我不会把所有功能都塞进一个庞大的 update 函数
draw. On va justement couper le programme en petits morceaux.
和一个庞大的 draw 函数里,而是把程序拆分成小块。
C'est plus facile à modifier, c'est plus facile à tester.
这样更便于修改,也更便于测试。
On va par exemple faire une fonction def.
例如,我们来定义一个函数:
Dro vaisseau. Et pour l'instant je mets rien dedans.
draw_ship(绘制飞船),目前先留空。
Alors quand je veux faire une fonction sans rien mettre dedans mais que la syntaxe
当我们想定义一个空函数,但又需保证语法正确时,
reste bonne, je dis pass.
就写上 pass(占位符)。
Pass ça veut dire tu fais rien mais juste il y a une ligne qui est présente.
‘Pass’ 意思是‘你什么都不做’,但屏幕上会显示一条线。
Def et on va faire aussi un update
定义一下,我们还要更新飞船。
vaisseau. pass donc là
所以这里,
je vais plutôt le refaire comme dans l'énoncé le faire dans les update et vaisseau
我将按题目要求重新编写:把相关代码放进 update 和 vaisseau 函数中。
donc là on a une fonction qui va devoir mettre à jour la position du vaisseau en
现在我们有一个函数,
fonction des touches qu'on va
它需要根据键盘上按下的键
à voir au clavier, et ensuite le draw vaisseau qui va devoir dessiner le vaisseau
来更新飞船的位置,然后是绘制飞船的函数,负责在屏幕上画出飞船。
spatial. Et on va ici, à l'intérieur de la fonction principale Update,
接下来,在主 update 函数内部,
appeler la fonction.
我们将调用这个函数。
UpdateVaisseau, donc je fais un appel.
更新飞船,因此我发起一个调用。
à la fonction update vaisseau, et là dans draw, après avoir effacé l'écran,
调用飞船更新函数,然后在绘图函数中,先清屏,
je vais faire un update,
我将执行一次更新,
pardon un draw.
抱歉,是绘制。
Et dans ce cas- là, vous avez ici la fonction draw, la fonction update.
在这种情况下,您这里可以看到draw函数和update函数。
Imaginez par exemple que vous voulez déboguer quelque chose,
例如,假设您想调试某个功能,
vous ne voulez plus de l'affichage du vaisseau, vous avez juste à commenter.
此时您不再需要显示飞船,只需将其注释掉即可。
le update vaisseau et le draw vaisseau,
更新飞船和绘制飞船,
et vous n'avez plus de vaisseau dans le jeu. C'est plus facile que de devoir
接着游戏中就不再有飞船了。这比注释掉所有处理飞船的代码行要简单得多。
commenter toutes les lignes de code qui s'occupent du vaisseau.
注释掉所有处理飞船的代码行。
Donc là, on veut avoir un vaisseau, donc on va décommenter,
因此,我们现在需要一个飞船,所以我们要取消注释,
mais le fait de couper les fonctionnalités en plein de petites fonctions qui chacune
但把功能拆分成许多小函数,
font une chose précisément permet d'avoir du code qui est plus facile à déboguer,
每个函数只做一件明确的事,这样代码就更容易调试,
qui est plus facile à utiliser, etc.
也更容易使用,等等。
Donc, alors, drawvaisseau,
因此,那么,飞船,
drawvaisseau, vous remarquerez que les variables x
飞船,您会注意到变量 x
vaisseau et y vaisseau sont là dans le programme principal.
飞船和 y 飞船位于主程序中。
Et la fonction draw vaisseau.
还有绘制飞船的函数。
n'est pas directement enfin elle est dans le programme principal mais ces variables
它并不直接定义在函数内部——实际上它位于主程序中,但这些变量
là sont en dehors de la fonction drawvessel mais je vous avais dit que le python
在这里却位于draw_vessel函数之外。不过我之前告诉过大家,Python
quand on utilisait une variable dans une fonction et que cette variable n'était pas
当在函数中使用一个变量,而这个变量又不是
une variable qui avait été
被明确定义为该函数的局部变量时,Python会很友好地
Conçu comme étant local pour la fonction, le Python était gentil,
去外部查找这个变量。
il allait la chercher dehors.
这正是Python调用这一特性的典型例子。
Voilà un exemple typique de moment où le Python va utiliser cette fonctionnalité.
Python将被要求绘制一个矩形,其坐标为xv和yv;
Le Python, on va lui demander d'aller dessiner un rectangle avec comme coordonnées
由于Python在函数内部找不到名为xv、yv的局部变量,
xv et yv, et comme le Python ne voit pas de variable locale de la fonction.
它就会到主程序中去寻找这些信息。
xv yv, il va aller chercher l'information à l'extérieur dans le programme principal.
因此,为了画出我的飞船,我将绘制一个像素点。
Donc là, pour aller faire mon vaisseau, je vais faire un pixel.
即调用point_rect函数。我再提醒一下:point_rect
point rect, et je vous rappelle que pixel point rect.
用于绘制一个矩形,
ça dessine un rectangle de
其宽度为w,高度为h,颜色为col,起始位置为x、y。
largeur w, de hauteur h et de couleur col à partir de x y.
所以这里我将传入xv和yv作为起始位置。
Donc là, je vais faire un xv.
尺寸方面,我们做一个比较小的飞船,比如10×10像素。
yv, la taille, on va faire un vaisseau assez petit, on va faire du 10 par 10.
至于飞船的颜色,我们保持简单些。
Et la couleur de notre vaisseau, on va rester sur un truc assez simple.
飞船颜色我们已有紫色,这次就选黄色吧——
La couleur de notre vaisseau, on a déjà du violet, on va faire un vaisseau,
你们可以自由选择颜色,比如编号9,
vous faites la couleur que vous voulez, un neuf, voilà, couleur numéro neuf,
也就是黄色。
jaune.
(即黄色)