B1 · 第26集 · 5:10
用Pyxel制作太空游戏
本集介绍如何用Python和Pyxel库创建一个像素风格的太空射击游戏,包括窗口初始化、坐标系统和游戏循环(update/draw)的基本原理。
来源:jmbarbier / peertube.solidev.net · 许可:CC BY-SA 4.0
字幕
Alors avec ce qu'on sait déjà faire en Python, on a de quoi créer un petit jeu,
那么,利用我们目前已掌握的Python知识,已经足以开发一个小型游戏了,
et puis au fur et à mesure qu'on va apprendre des nouvelles choses,
之后,随着我们不断学习新知识,
on va utiliser ces nouvelles compétences pour mettre à jour ce jeu et lui augmenter
我们将运用这些新技能来更新这个游戏,
les fonctionnalités.
并为其增添更多功能。
Donc le principe, c'est la même chose que ce que je vous ai fait faire il
因此,本项目的基本思路,和一两周前我让大家以‘模块化方式’完成的练习相同,
y a une ou deux semaines en mode
即采用‘模块化方式’,
bloc, c'est- à- dire un
也就是一种系统:
système où vous avez un petit vaisseau spatial,
其中有一个小型宇宙飞船;
vous avez des astéroïdes qui vont descendre,
还有若干小行星自上而下坠落;
et l'objectif initial c'est déjà de pas cogner les astéroïdes.
最初的目标,就是避免撞上这些小行星。
Donc sauf que la différence, c'est qu'au lieu de le faire en mode bloc,
不过,本次任务与之前不同之处在于:
on va le faire en mode pixel.
我们将改用‘像素模式’来实现。
Vous avez le lien dans le cahier de texte pour le document commun,
教材笔记中提供了共享文档的链接,
et ce qu'on va faire, c'est on va faire la première partie ensemble,
接下来,我们将一起完成第一部分,
pour que je puisse vous montrer de quoi il s'agit, les principes,
以便我向大家展示其基本原理等内容。
etc. Et puis ensuite après, c'est à
之后,就由你们自己来完成了。
vous d'aller, en gros je vais faire le vaisseau et vous allez faire les astéroïdes
比如,我负责制作飞船,而你们则负责制作小行星,
par exemple ou quelque chose comme ça.
或者类似的任务。
Donc le moteur de jeu qu'on va utiliser s'appelle Pyxel,
我们将使用的游戏引擎名为Pyxel,
Pyxel, P- Y comme Python, X- L.
Pyxel——P-Y代表Python,X-L是后缀。
Si vous cherchez la documentation, vous allez la trouver à deux endroits.
若需查阅官方文档,您可在两个地方找到。
Donc déjà première chose, il n'y a pas de consigne,
首先,文档中没有操作说明,
vous pouvez gagner de la place en coupant les consignes comme ça.
因此您可以直接删去这部分内容,节省空间。
Si vous voulez les retrouver, vous pourrez les retrouver.
若您之后需要找回说明,仍可随时查阅。
Mais vous pouvez passer en plein écran si vous avez envie.
当然,您也可以根据需要切换为全屏模式。
Et lorsque vous allez...
当您需要……
Besoin de documentation, il y a une antisèche fournie directement dans
查阅文档时,开发环境中已直接提供了一份速查表。
l'environnement de développement.
开发环境中已直接提供了一份速查表。
Voilà. Donc là ici, vous avez une antisèche qui a toutes les informations,
看,这里就是一份速查表,包含了所有信息,
mais de manière assez rapide, on va dire ça comme ça.
但内容简洁明了,我们姑且这么说吧。
Donc si vous voulez avoir le détail de tout,
如果您想了解全部细节,
ça c'est pour vous rappeler en fait les choses,
这份速查表主要是帮您快速回忆要点,
mais si vous voulez avoir le détail, vous avez l'adresse ici.
而详细内容,请点击此处链接。
Donc cliquez, ouvrir dans un nouvel onglet,
请单击链接,或在新标签页中打开,
et vous avez ici la documentation complète avec une documentation en français.
即可查看完整的法语版官方文档。
qui va décrire tout, comment l'installer, comment l'exécuter,
文档将详细介绍:如何安装、如何运行,
qui donne des exemples,
并附有大量示例代码。
et nous on va commencer par le plus simple, créer notre première application.
接下来,我们将从最简单的开始:创建第一个应用程序。
Donc on va prendre.
我们先来选取这段代码。
Le code qui nous est proposé ici, on va le copier.
将屏幕上显示的这段代码复制下来。
Et on va le coller dans notre Pixel Studio,
然后粘贴到 Pixel Studio 的代码编辑区。
dans l'endroit du code.
也就是代码输入的位置。
Alors on va décomposer un petit peu.
下面我们稍作分解。
Cette première partie ici, init,
这一部分叫 init(初始化),
on va créer une fenêtre de jeu de 160 pixels de large par 120 pixels de haut.
用于创建一个宽 160 像素、高 120 像素的游戏窗口。
On va créer une fenêtre de jeu de 160 pixels de large par 120 pixels de haut.
它会创建一个宽 160 像素、高 120 像素的游戏窗口。
ça, ça va nous donner notre écran et on va pouvoir repérer dans cet écran les
这个窗口将成为我们的游戏画面,
positions des objets en partant du haut à gauche.
所有对象的位置都以左上角为原点进行定位。
Alors si je l'illustre,
我来图示说明一下:
on a. Notre écran qui est comme ça, qui va ici faire 160 pixels,
我们的屏幕就像这样,宽度为 160 像素,
ça c'est la direction des x, et 120 pixels.
x 轴向右延伸,高度为 120 像素。
ça c'est dans la direction des y, et le point 0 0.
这指向 y 轴方向,且该点坐标为 (0, 0)。
L'origine est située ici, donc 0, 0.
原点就在这里,即 (0, 0)。
Quand on va descendre ici, on sera.
当我们往这里下移时,
Dans les y qui augmentent, et là on sera dans les x qui augmentent.
y 值会增大;而往这边移动时,x 值会增大。
Donc ce point- là, le point à l'extrémité ici, c'est le point x qui vaut 160.
因此,这个位于右上角的点,其 x 坐标为 160。
et y qui vaut 120.
y 坐标为 120。
x, y. X, Y. Donc on va pouvoir donner la position,
x,y。X,Y。因此我们可以确定某个位置,
imaginez que je veux dessiner un carré.
比如我想画一个正方形,
à cette position- là.
就放在这个位置。
Je vais lui donner la position du coin du carré, je sais pas,
我会告诉它正方形左上角的位置,比如
70, 30. Et puis après, je vais lui donner par exemple la largeur et la hauteur de
(70, 30);然后,再告诉它这个矩形的宽和高。
mon rectangle.
——这就是矩形。
Donc c'est ce qu'on va faire ici.
接下来我们就这么做。
On va dessiner des objets qui vont faire notre jeu à l'intérieur d'un écran et ça se
我们将在屏幕内部绘制游戏所需的各类对象,
passe en deux parties.
整个过程分为两个部分。
Si on reprend ici, vous voyez que donc j'ai initialisé mon terrain de jeu
回到这里,大家可以看到:我先初始化了游戏区域,
et ensuite je vais lui dire de lancer le jeu avec deux fonctions def update et def
接着调用两个函数来启动游戏:def update 和 def draw,
draw qui sont là.
它们就写在这里。
Chacune de ces fonctions a un rôle.
这两个函数各自承担不同职责。
Update, ça permet de préparer
update 函数用于准备画面,
l'affichage, et l'affichage, il est fait dans draw.
而实际绘制则由 draw 函数完成。
Donc en gros, on va mettre la logique du jeu dans le update,
简单来说,游戏逻辑全部放在 update 中,
c'est là qu'on va faire déplacer les choses,
比如让物体移动,
qu'on va vérifier s'il y a des collisions, qu'on va changer de mode,
检测是否发生碰撞、切换游戏模式等。
etc. Et dans le draw, le draw ne s'occupe que de dessiner,
而 draw 函数只负责绘图,
selon les informations qui ont été mises à jour dans update.
依据的是 update 中已更新的数据。