Pygame Zero(pgzrun)游戏库介绍

pgzero是python的一个第三方库。pgzrun 是 python game zero run 的缩写, 它对 Pygame 进行了封装, 屏蔽了繁琐枯燥的框架代码, 让学习者可以更专注于游戏的实现逻辑, 并且更快看到成果。

官网https://pygame-zero.readthedocs.io/en/stable/

中文https://pygame-zero.readthedocs.io/zh_CN/latest/introduction.html

pgzrun库的安装与导入说明

安装Pygame Zero(pgzrun)之前需要先安装Pygame,因为Pygame Zero是基于Pygame开发的一个简化框架。关于Pygame可参见 https://blog.csdn.net/cnds123/article/details/119514520

特别提醒一下,pgzrun模块(库)安装的时候,名称用pgzero,在cmd中输入

pip install pgzero

回车

【关于安装安装第三方库的更多情况,可参见:https://blog.csdn.net/cnds123/article/details/104393385

导入的时候用pgzrun

import pgzrun

pgzrun库使用基础

坐标系

以左上角为原点 ( 0, 0 )

项目的目录一般如下图所示:

images/ 目录是Pygame Zero查找代码中图片的标准默认目录。

music/ 是 Pygame Zero 查找音乐文件的默认标准目录。

sounds/ 是 Pygame Zero 查找声音文件的默认标准目录。

Pygame Zero支持的图片格式

.png

.jpg

.gif

推荐使用 png 类型, 因为这种类型支持透明背景。

音乐文件:音乐文件通常是指较长时长的音频剪辑,如歌曲、乐曲等,用于背景音乐、配乐或其他需要长时间播放的场合。常用的格式:

MP3 (.mp3)

OGG (.ogg)

WAV (.wav)

声音文件:声音文件通常是指短时的音频片段,如音效、声效等,用于游戏、动画、影视等中的特定声音效果,如打击声、爆炸声、脚步声等各种效果音。声音文件相对较短,通常以较低的比特率进行编码,以节省存储空间和加载时间。常用的格式:

WAV (.wav)

OGG (.ogg)

特别提示,将资源文件(Resource Files,如音乐文件、声音文件、图片)与代码文件放置在同一目录下,或标准默认位置,这样可以直接使用文件名即可。但你也可以将资源文件选择在其他位置存储图片和声音文件,只需在代码中提供正确的文件路径即可。

无论是将资源文件与代码文件放置在同一目录下、默认位置还是其他位置,重要的是确保代码中使用的文件路径与实际的文件位置匹配。这样,Pygame Zero 就能正确加载和使用你想要的资源。

在Pgzero中,通过两个常量值来确定程序运行窗口的大小,WIDTH和HEGIHT是Pgzero预设的用来确定场景的宽和高的两个常量。还可用TITLE来设置窗口的标题。需要大写。

Pgzero中生成一个游戏角色十分简单,只需一行代码即可。Actor类是Pgzero库提供的角色类,调用该类的构造方法并传入角色图片和位置便可生成一个角色对象。

<变量> =Actor("str", (x, y))    #生成一个游戏角色,导入一个名为str图片

Actor类的构造方法有两个基本参数,第一个参数是角色的图片文件名,角色图片可以调用的图片格式是.jpg、.png、.gif,调用图片文件时无需扩展名,第二个参数是角色的初始位置坐标。

Pgzreo提供了很多的内置对象,以便进行各项操作。其中内置对象screen(屏幕)主要用来在程序运行窗口进行绘制图形和图像及文字信息等,在游戏编程中经常会用到screen对象提供的很多的绘制方法。screen(屏幕)对象的fill()方法:可以设定游戏程序运行窗口的背景颜色,其参数可以是RGB颜色模式的三个颜色分量值或者颜色英文字符串。

Pygame Zero定义了一些其他固定名称的函数(约定好的函数),用于处理特定的游戏事件或执行其他功能。你可以根据需要在你的代码中实现这些函数,以便响应相应的事件。以下是一些常用的固定函数名称:

draw():这个函数用于绘制游戏场景。你可以在这个函数中使用 Pygame 的绘图函数来绘制图像、文本和等,并将它们显示在屏幕上。Pgzero库自带函数,它可以显示各种图形或图像,它是Pygame、Pygame Zero库约定好的函数,程序运行以后,会被自动执行。所有绘制角色的代码,都需要写在这个函数中。用户可以在程序中将自己的代码定义在draw( )函数内。

update():这个函数用于更新游戏逻辑和状态。你可以在这个函数中实现游戏中各种元素的移动、碰撞检测、状态变化等更新操作。update()函数是Pygame zero库自带的函数,每秒自动运行60次用以不断更新游戏,程序运行以后,会被自动执行。所有更新游戏场景、游戏角色的代码,所有对角色对象操作的代码都要写在update()函数中。

on_key_down(key):这个函数在用户按下某个键时被调用。你可以根据不同的键来执行相应的操作,例如移动角色、触发事件等。key参数表示被按下的键的名称。

on_key_up(key):这个函数在用户释放某个键时被调用。你可以根据需要对键释放事件作出响应,例如停止角色移动等。key参数表示被按下的键的名称。

on_mouse_down(pos, button):这个函数在用户按下鼠标按钮时被调用。你可以检测按钮的位置,然后执行相应的操作,如捕获点击事件、进行拖动等。button参数表示释放的鼠标按钮的名称,pos参数表示释放发生的位置。

on_mouse_up(pos, button):这个函数在用户释放鼠标按钮时被调用。你可以根据需要对鼠标松开事件做出响应,如停止拖动等。button参数表示释放的鼠标按钮的名称,pos参数表示释放发生的位置。

on_mouse_move(pos, rel, buttons):当鼠标移动时调用。pos参数表示当前鼠标位置,rel参数表示相对于上次移动的位置变化,buttons参数表示当前按下的鼠标按钮的状态。

on_quit():当关闭游戏窗口时调用。

示例

pgzero设计游戏一般步骤

1.导入pgzrun。

2.定义游戏场景和角色:在游戏开始之前,你需要定义游戏的场景和角色。这包括创建屏幕、背景图像、精灵(Sprites)和其他游戏元素。

3.编写游戏逻辑:在游戏中,你需要编写处理用户输入、更新游戏状态和绘制游戏场景的逻辑代码。这可能涉及到键盘或鼠标事件的处理、碰撞检测、移动精灵等。

4.启动游戏循环:使用pgzrun.go()来启动游戏循环。这将负责处理游戏的主要逻辑,并根据每个帧更新游戏状态和绘制场景。

下面给出一个简单的例子,

项目文件结构如下:

音乐文件自己找一个吧,我这里是my_music.mp3。

源码如下:

import pgzrun

TITLE = "pgzrun示例" #设置窗口顶部的标题
WIDTH = 400
HEIGHT = 300

alien = Actor("player.png")
alien.pos = (WIDTH // 2, HEIGHT // 2)

def on_key_down(key):
    if key == keys.SPACE:
        play_sound()

def draw():
    screen.clear()
    screen.blit("background.jpg", (0, 0)) #添加背景图片
    alien.draw()

def update():
    pass  # 游戏逻辑更新

def play_sound():    
    music.play("music.mp3")  # 替换为你的音乐文件路径

pgzrun.go()

运行之,效果如下:

上面示例中,首先导入了 pgzrun 模块并设置了游戏窗口的宽度和高度。然后定义了一个名为 " player.png " 的角色,并将其初始位置设定在屏幕中央,在draw()中添加了背景图片。并实现了当用户按下空格键时,播放音效。

下面给出一个打小老鼠的游戏

游戏效果:小老鼠在从左到右循环移动,用户鼠标击中时表示小老鼠被打发出叫声。

项目文件结构如下:

声音文件自己找一个吧,我这里是howl.wav,是小老鼠被打(用户鼠标击中)时的叫声。

源码如下

import time  # 导入time模块

import pgzrun  # 导入pgzero的模块运行工具pgzrun

TITLE = "打小老鼠游戏" #设置窗口顶部的标题
WIDTH = 800  # 画布宽
HEIGHT = 400  # 画布高

cartoon = Actor('cartoon')  # 用images文件夹中的图像'cartoon'生成演员
cartoon.pos = 0, 200  # 定位

def draw():  # 绘制画面(显示钩子)
    screen.clear()  # 清屏
    screen.fill((255, 255, 255))  # 填色
    cartoon.draw()  # 绘制演员

def update():  # 更新数据(显示钩子)
    cartoon.left += 2  # 右移
    if cartoon.left > WIDTH:  # 如果超出屏幕右边界
        cartoon.right = 0  #  重新放到屏幕左侧外

def on_mouse_down(pos):  # 当鼠标按下(事件钩子)
    if cartoon.collidepoint(pos):  # 如果与鼠标位置碰撞
        time.sleep(0.1)  # 暂停
        set_cartoon_hurt()  # 调用函数
    else:
        print("You missed me!")  # 打印消息

def set_cartoon_hurt():  # 外星人被击中后的动作
    cartoon.image = 'cartoon_hurt'  # 换用images文件夹中的图像'cartoon_hurt'
    sounds.howl.play()  # 播放sounds文件夹中的声音文件'howl'
    clock.schedule_unique(set_cartoon_normal, 1.0)  # 用定时器调用一次函数

def set_cartoon_normal():  # 外星人复原
    cartoon.image = 'cartoon'  # 换用原图

pgzrun.go()  # 用pgzrun运行本脚本

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐