Python Arcade 游戏库特性介绍

23 篇文章 1 订阅
23 篇文章 4 订阅

点击上方「与非学堂」关注我们

一份问卷调查,期待听到您的声音


 

大家可能已经注意到,我在前面发过的有几篇关于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 = 800SCREEN_HEIGHT = 600SCREEN_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 engineself.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 —

 

 

 

 

 

 

 

与非学堂

专注青少年信息技术教育,探讨少儿编程的教与学,交流技巧、分享资源

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值