点击上方「与非学堂」关注我们
大家可能已经注意到,我在前面发过的有几篇关于Python的文章,里面用到了arcade。
比如合成大西瓜这个游戏。(参见【超详细Python教学课件分享】合成大西瓜)
Arcade是一个Python的游戏库。
孩子们学Python,为什么要用游戏库来学,这一点我想不用多说了。游戏嘛,是个孩子都会喜欢;在玩中学,一直是我们坚持的教育理念。大家可以参见之前的《编程学习:用游戏的方式在游戏中学做游戏》这篇文章。
今天我们主要就来给大家介绍一下这款游戏框架。
arcade在Python的官网上的介绍在这里:https://wiki.python.org/moin/PythonGameLibraries。
它基于Pyglet开发,风格跟Pygame是不大一样的。
什么是Pyglet呢?
pyglet provides an object-oriented programming interface for developing games……
https://wiki.python.org/moin/PythonGameLibraries
Pyglet是Python的一种面向对象的游戏框架。
Arcade属于Pyglet这个大家族,自然也是面向对象的。
Arcade is an easy-to-learn Python library for creating 2D video games. It is ideal for people learning to program.
https://wiki.python.org/moin/PythonGameLibraries
Easy-to-learn,这就是我们选择Arcade的原因。
到底有多easy呢?
经过一番研究啊,总结起来,可以归纳为以下几点:
一、设计符合直觉。
怎么符合直觉呢?
它设计了Window、View、Sprite、Sound等类,用于实现窗体、界面、角色、声音等的操控。
像Pygame它是使用的while循环来处理各种绘制、事件等,而使用arcade呢完全使用类来完成的。
对比一下,下面是一个Pygame程序:
screen = pygame.display.set_mode((640, 480))
player = pygame.image.load('player.bmp').convert()
background = pygame.image.load('background.bmp').convert()
screen.blit(background, (0, 0))
objects = []
for x in range(10):
o = GameObject(player, x*40, x)
objects.append(o)
while 1:
for event in pygame.event.get():
if event.type in (QUIT, KEYDOWN):
sys.exit()
for o in objects:
screen.blit(background, o.pos, o.pos)
for o in objects:
o.move()
screen.blit(o.image, o.pos)
pygame.display.update()
pygame.time.delay(100)
这是一个Arcade程序模板:
import arcade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "Arcade程序模板"
class MyGame(arcade.Window):
def __init__(self, width, height, title):
super().__init__(width, height, title)
arcade.set_background_color(arcade.color.AMAZON)
def on_draw(self):
arcade.start_render()
def on_update(self, delta_time):
pass
def on_key_press(self, key, key_modifiers):
pass
def on_key_release(self, key, key_modifiers):
pass
def on_mouse_motion(self, x, y, delta_x, delta_y):
pass
def on_mouse_press(self, x, y, button, key_modifiers):
pass
def on_mouse_release(self, x, y, button, key_modifiers):
pass
if __name__ == "__main__":
game = MyGame(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
arcade.run()
二、跟Scratch可以很好地衔接。
孩子一般从Scratch入门了编程,往上学Python的话,arcade提供的思路跟Scratch有很多相似的地方,这样一来就可以促进学习迁移,起到放缓学习坡度的作用。
关于这一点,之前我也专门写了一篇Scratch与arcade框架的对比整理,强烈建议收藏起来慢慢看。
建议收藏!Scratch与Python Arcade对比整理,解锁Python入门正确姿势
三、不同级别的物理引擎支持。
虽说pygame也支持使用Pymunk,但在arcade里,除了可以使用import导入pymunk外,还可以arcade内置的物理引擎:
import pymunk
#在window中:
self.space = pymunk.Space()
self.space.gravity = (0.0, -900.0)
还可以直接使用像下面这种方法进行添加。
# Create the physics engine
self.physics_engine = arcade.PymunkPhysicsEngine(damping=damping,gravity=gravity)
这种方法对初学者还是有点麻烦,Sprite中还直接提供了碰撞处理函数。
def update(self, delta_time):
""" Movement and game logic """
# Call update on all sprites (The sprites don't do much in this
# example though.)
self.coin_list.update()
# Generate a list of all sprites that collided with the player.
coins_hit_list = arcade.check_for_collision_with_list(self.player_sprite,
self.coin_list)
# Loop through each colliding sprite, remove it, and add to the score.
for coin in coins_hit_list:
coin.remove_from_sprite_lists()
self.score += 1
四、支持tmx格式。
这一点我觉得也挺重要的,有了它就可以做出来场景更大的游戏,游戏创意空间就更大了。
其他还有一些特点,也很重要,比如酷炫的粒子效果什么的,这里就不多说了。
美中不足的是,它的大部分文档还是英文的。
大家是否期待看到更多关于Arcade 介绍呢?请给与非学堂点赞支持吧!
— OVER —
与非学堂
专注青少年信息技术教育,探讨少儿编程的教与学,交流技巧、分享资源