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运行本脚本