跳转至

Arcade:适合少儿Python入门的游戏框架

最近在教几个小学三年级孩子学Python,重新梳理了一下Python游戏框架和艺术/创意框架。(游戏部分主要参考top-python-game-engines。)主要有些Python游戏框架:

  • Arcade,比Pygame更现代,适合Python入门,包括儿童
    • 支持Python类型提示
    • 面向对象的编程范式,简单应用也可以面向过程
    • 精简的模板代码
    • 优秀的社区,完善的教程、样例和文档,内置资源
    • 使用OpenGL和Pyglet
    • 更现代和完善的游戏架构
      • 支持基于帧的动画精灵
      • 有物理引擎
      • 相机、粒子、GUI、视图(小窗)、瓷砖地图、寻路……
  • Pygame,老派代表
  • Pygame Zero,简单易用,适合儿童Python教育
  • Wasabi2d,比Pygame更现代,但不太成熟
  • Adventurelib,文字冒险游戏框架,以上三个库出自Daniel Pope
  • Ren’Py,视觉小说游戏框架,可用来用来做教育应用

这次发现Arcade很好。以前粗粗看过,感觉比较复杂,不适合孩子入门。这次上手试了试,感觉各方面都不错,大人孩子都适合,强烈推荐。

模板代码简洁#

Arcade模版代码的简洁不亚于pgzero。比如在窗口上画一个圆:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
import arcade

arcade.open_window(600, 600) # 打开一个窗口
# arcade.set_background_color(arcade.color.WHITE) # 设置窗口背景色
# arcade.start_render() # 清屏

arcade.draw_circle_filled(300, 300, 200, (255,255,0)) # 画填充圆

arcade.finish_render() # 显示结果,清理缓冲区
arcade.run() # 保持窗口打开

让圆移动起来:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import arcade
import time

arcade.open_window(600, 600)
# arcade.set_background_color(arcade.color.WHITE)

x = 0
for i in range(240):
    arcade.start_render() # 清理屏幕,启动渲染进程
    arcade.draw_circle_filled(x, 300, 200, (255,255,0))
    arcade.finish_render() # 显示结果,清理缓冲区

    time.sleep(0.017)
    x = x + 5

arcade.run() # 保持窗口打开

面向对象编程#

刚才这种面向过程的样式,主要用来画图或简单动画。 游戏一般用面向对象的样式,也不繁杂。如同位置反复画一个圆:

1
2
3
4
5
6
7
8
9
import arcade

class MyWindow(arcade.Window):
    def on_draw(self): # 每帧/update会执行一次
        arcade.draw_circle_filled(300, 300, 200, (255,255,0,2)) # 有透明度的圆,能看出重复画的变化

MyWindow(600, 600) # type: ignore

arcade.run()

简单的动画(为简明期间,暂不用on_update()和实例变量):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import arcade

class MyWindow(arcade.Window):
    x = 0
    def on_draw(self): # 每帧/update会执行一次
        self.clear()
        self.x = self.x + 5
        arcade.draw_circle_filled(self.x, 300, 200, (255,255,0))

MyWindow(600, 600) # type: ignore
arcade.run()

文档和教程完善#

Arcade官方的例子、教程很多。

他们有一个面向初学者的教程,除了讲Arcade,还包括计算原理,开发环境准备,git,Python基础,等等,可供老师们参考,根据学生情况选用。

另推荐realpython.com的入门教程arcade-python-game-framework,有一些原理性的解释,适合教师和自学的成人

也可参考我的Arcade学习笔记

开发和社区活跃#

相对于Pygame而言,Arcade是新秀,但社区已经比较成熟。比如代码库星标已有1.4k(Pygame是5.9k),开发活跃。

从官网和Discord社区看,Arcade主要面向Python教育场景。它还内置了一些多媒体资源,可能也是这个原因。命名多用完整的词语、规律的组合,不嫌长;而Pygame较多地用缩写,有极客范。

新框架的优势#

它还有新框架的优势。

比如支持Python类型提示,这一点对初学者很重要。Pygame Zero的一个重要问题就是需要预先导入很多对象,否则编辑器无法探测到它们(尽管运行时会自动导入)。

它的游戏架构也更现代,更完善,比如支持基于帧的动画精灵,有物理引擎,还有相机、粒子、GUI、视图(小窗)、瓷砖地图、寻路等,这些往往是成熟游戏框架才又有的。

在性能方面,它跟Pygame大概更有优劣。可参考Arcade官方所做的功能和性能对比(部分内容过时),第三方的性能测评(注意评论中有重要的更新信息)。

其他#

如果说对初学者有什么障碍的话,可能主要是类继承。类与实例,类成员与实例成员,实例的初始化,这些基础概念有些抽象。

另,p5系列的Python框架没有合用的,艺术、创意方向也可以直接用Arcade。详见常用软件、语言和框架数字艺术部分。

评论