当前位置:首页 > Python > 正文

Python Arcade游戏开发库入门教程 - 从零开始创建2D游戏

Python Arcade游戏开发库入门教程

从零开始创建2D游戏 - 完整指南

什么是Arcade库?

Arcade是一个现代化的Python 2D游戏开发库,专为创建精美游戏而设计。相比Pygame,它提供了更简单的API、更好的性能和更现代化的功能。

主要特点:

  • 简单易学的API
  • 内置物理引擎支持
  • 强大的图形绘制能力
  • 跨平台支持
  • 详细的官方文档和教程

安装Arcade库

使用pip可以轻松安装Arcade:

pip install arcade

验证安装:

import arcade
print(arcade.__version__)

创建第一个游戏窗口

下面是一个创建基本游戏窗口的代码:

import arcade

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "我的第一个Arcade游戏"

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
        arcade.set_background_color(arcade.color.SKY_BLUE)
    
    def on_draw(self):
        self.clear()
        arcade.draw_text("Hello, Arcade!", 
                         SCREEN_WIDTH/2, SCREEN_HEIGHT/2,
                         arcade.color.BLACK, 24, 
                         anchor_x="center")

if __name__ == "__main__":
    window = MyGame()
    arcade.run()
Hello, Arcade!

绘制基本图形

Arcade提供了多种绘制基本图形的方法:

圆形

矩形

三角形

def on_draw(self):
    self.clear()
    
    # 绘制一个蓝色的圆形
    arcade.draw_circle_filled(200, 300, 50, arcade.color.BLUE)
    
    # 绘制一个红色的矩形
    arcade.draw_rectangle_filled(400, 300, 100, 80, arcade.color.RED)
    
    # 绘制一个绿色的三角形
    arcade.draw_triangle_filled(600, 400, 550, 300, 650, 300, arcade.color.GREEN)
    
    # 绘制文本
    arcade.draw_text("基本图形示例", 
                     SCREEN_WIDTH/2, 100,
                     arcade.color.BLACK, 20, 
                     anchor_x="center")

处理用户输入

Arcade可以轻松处理键盘和鼠标输入:

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
        self.player_x = SCREEN_WIDTH // 2
        self.player_y = SCREEN_HEIGHT // 2
    
    def on_draw(self):
        self.clear()
        arcade.draw_circle_filled(self.player_x, self.player_y, 30, arcade.color.BLUE)
    
    def on_key_press(self, key, modifiers):
        """ 处理键盘按键 """
        if key == arcade.key.LEFT:
            self.player_x -= 10
        elif key == arcade.key.RIGHT:
            self.player_x += 10
        elif key == arcade.key.UP:
            self.player_y += 10
        elif key == arcade.key.DOWN:
            self.player_y -= 10
    
    def on_mouse_press(self, x, y, button, modifiers):
        """ 处理鼠标点击 """
        if button == arcade.MOUSE_BUTTON_LEFT:
            self.player_x = x
            self.player_y = y
使用方向键移动或点击鼠标

创建动画精灵

使用精灵(Sprite)可以创建更复杂的游戏对象:

class MyGame(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
        self.player = None
    
    def setup(self):
        """ 初始化游戏 """
        self.player = arcade.Sprite(":resources:images/animated_characters/female_person/femalePerson_idle.png", 0.5)
        self.player.center_x = SCREEN_WIDTH // 2
        self.player.center_y = SCREEN_HEIGHT // 2
    
    def on_draw(self):
        self.clear()
        self.player.draw()
    
    def on_update(self, delta_time):
        """ 游戏逻辑更新 """
        self.player.update()
    
    def on_key_press(self, key, modifiers):
        if key == arcade.key.LEFT:
            self.player.change_x = -5
        elif key == arcade.key.RIGHT:
            self.player.change_x = 5
        elif key == arcade.key.UP:
            self.player.change_y = 5
        elif key == arcade.key.DOWN:
            self.player.change_y = -5
    
    def on_key_release(self, key, modifiers):
        if key in (arcade.key.LEFT, arcade.key.RIGHT):
            self.player.change_x = 0
        elif key in (arcade.key.UP, arcade.key.DOWN):
            self.player.change_y = 0
玩家精灵
使用方向键移动精灵

完整游戏示例

下面是一个简单的收集金币游戏:

import arcade
import random

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
SCREEN_TITLE = "金币收集游戏"

class CoinCollector(arcade.Window):
    def __init__(self):
        super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE)
        self.player = None
        self.coins = None
        self.score = 0
        
    def setup(self):
        self.player = arcade.Sprite(":resources:images/animated_characters/female_adventurer/femaleAdventurer_idle.png", 0.5)
        self.player.center_x = 50
        self.player.center_y = 50
        
        self.coins = arcade.SpriteList()
        for i in range(20):
            coin = arcade.Sprite(":resources:images/items/coinGold.png", 0.3)
            coin.center_x = random.randint(100, SCREEN_WIDTH - 100)
            coin.center_y = random.randint(100, SCREEN_HEIGHT - 100)
            self.coins.append(coin)
            
        self.score = 0
    
    def on_draw(self):
        self.clear()
        arcade.draw_text(f"分数: {self.score}", 10, SCREEN_HEIGHT - 30, arcade.color.GOLD, 20)
        self.player.draw()
        self.coins.draw()
    
    def on_update(self, delta_time):
        self.player.update()
        
        # 检测金币收集
        hit_list = arcade.check_for_collision_with_list(self.player, self.coins)
        for coin in hit_list:
            coin.remove_from_sprite_lists()
            self.score += 1
    
    def on_key_press(self, key, modifiers):
        speed = 5
        if key == arcade.key.LEFT:
            self.player.change_x = -speed
        elif key == arcade.key.RIGHT:
            self.player.change_x = speed
        elif key == arcade.key.UP:
            self.player.change_y = speed
        elif key == arcade.key.DOWN:
            self.player.change_y = -speed
    
    def on_key_release(self, key, modifiers):
        if key in (arcade.key.LEFT, arcade.key.RIGHT):
            self.player.change_x = 0
        elif key in (arcade.key.UP, arcade.key.DOWN):
            self.player.change_y = 0

if __name__ == "__main__":
    game = CoinCollector()
    game.setup()
    arcade.run()
分数: 0

学习资源

通过本教程,您已经学会了使用Python Arcade库创建2D游戏的基本技能。继续探索Arcade的更多功能,如物理引擎、粒子系统和音效处理,创建更精彩的游戏!

发表评论