文章目录
PyGame 基础语法
一、 模块简介
1、 概述
pygame是Python的第三方库,里面提供了使用Python开发游戏的基础包,但是在进行游戏开发的时候不推荐使用pygame,本文章以示例的形式对pygame的一些简单的使用方式进行讲解
pygame中文文档,本文章只是对pygame模快有个大致的讲解,具体语法查看官方文档!
2、 安装
pip install pygame -i http://pypi.douban.com/simple/
3、 模块概览
模块名 | 功能 |
---|---|
pygame.cdrom | 访问光驱 |
pygame.cursors | 加载光标 |
pygame.display | 访问显示设备 |
pygame.draw | 绘制形状、线和点 |
pygame.event | 管理事件 |
pygame.font | 使用字体 |
pygame.image | 加载和存储图片 |
pygame.joystick | 使用游戏手柄或者 类似的东西 |
pygame.key | 读取键盘按键 |
pygame.mixer | 声音 |
pygame.mouse | 鼠标 |
pygame.movie | 播放视频 |
pygame.music | 播放音频 |
pygame.overlay | 访问高级视频叠加 |
pygame | 就是我们在学的这个东西了…… |
pygame.rect | 管理矩形区域 |
pygame.sndarray | 操作声音数据 |
pygame.sprite | 操作移动图像 |
pygame.surface | 管理图像和屏幕 |
pygame.surfarray | 管理点阵图像数据 |
pygame.time | 管理时间和帧信息 |
pygame.transform | 缩放和移动图像 |
4、 第一个程序
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: A.L.Kun
# @file: hello_.py
# @time: 2022/4/18 23:21
from pygame.locals import * # 里面存储了pygame模块要使用的所有的枚举值
import pygame # 导入pygame模块
from sys import exit
# 初始化pygame,为使用硬件做准备
pygame.init()
# 创建一个窗口
screen = pygame.display.set_mode((480, 850), 0, 32)
# 设置窗口标题
pygame.display.set_caption("hello world")
# 加载图片
background = pygame.image.load("./img/background.png").convert_alpha() # 加载透明背景图片
mouse_cursor = pygame.image.load("./img/cursor.ico").convert() # 加载鼠标图片
mouse_cursor.set_colorkey((0, 0, 0)) # 设置加载图片时,忽略黑色
while True:
for event in pygame.event.get(): # 添加事件监听
if event.type == QUIT: # 接收到退出事件后退出程序
exit()
screen.blit(background, (0, 0)) # 画上背景图
x, y = pygame.mouse.get_pos() # 获得鼠标位置
# 计算光标左上角位置
x -= mouse_cursor.get_width() / 2
y -= mouse_cursor.get_height() / 2
# 画上光标
screen.blit(mouse_cursor, (x, y))
# 刷新画面
pygame.display.update()
set_mode
:创建一个主窗口
convert
:将图像转换为surface对象,每次加载完图片都要调用此方法
5、 事件循环
-
处理外部输入(鼠标点击或键盘按下事件)
这意味着游戏在进行的同时,需要响应与处理用户的操作—这些可能是键盘上的键被按下,或鼠标被点击等事件。
-
更新游戏对象位置或状态
如果飞机对象在空中飞行,收到重力作用,自身的位置需要改变。如果两个对象相互碰撞,则需要爆炸。
-
渲染
此步骤中,在屏幕上重新绘制所有更新位置后的所有游戏对象。
二、 Display
1、 简介
pygame.display 其为显示模块,用于控制显示窗口和屏幕。
该模块提供对pygame显示的控制。Pygame有一个单一的显示Surface,它要么包含在一个窗口中,要么全屏运行。一旦你创建了显示,你就会把它当作一个普通的Surface。变化在屏幕上并不立即可见;你必须选择两个翻转功能中的一个来更新实际的显示。
显示的原点,其中x=0,y=0,是屏幕的左上方。两个轴都向屏幕右下角正向增加。
2、 创建主窗口
screen = pygame.display.set_mode(size=(),flags=0)
参数:
size
:设置主窗口大小,传入一个元组
flag
:功能标志位,表示创建的主窗口样式,比如创建全屏窗口、无边框窗口等,flags 参数值见下表
标志位 功能 pygame.FULLSCREEN 创建一个全屏窗口。 pygame.HWSURFACE 创建一个硬件加速窗口,必须和 FULLSCREEN 同时使用。 pygame.OPENGL 创建一个 OPENGL 渲染窗口。 pygame.RESIZABLE 创建一个可以改变大小的窗口。 pygame.DOUBLEBUF 创建一个双缓冲区窗口,建议在 HWSURFACE 或者 OPENGL 时使用。 pygame.NOFRAME 创建一个没有边框的窗口。
3、 添加元素
3.1 简介
当运行程序后会在电脑桌面上出现一个游戏的主窗口,这个主窗口的本质是一个 surface 对象,把理解为画布、画板、白纸在合适不过了,它相当于一个载体,用于承载一切游戏所用到的元素。假如您需要将一段文本方放置到主窗口中,那么您需要先创建一个包含文本的 surface 对象,之后再将它附加到主窗口上。简单的理解,就是将一张图 A 粘贴到另一张图 B 上。
主窗口(screen)相当于游戏程序中尺寸最大的 Surface 对象,在这个最大的“画布”中,我们还可以添加其他“小”的 Surface 对象,这些对象以矩形的形式存在于主窗口中,它们共同组成了一个游戏程序。
3.2 语法
scrren.blit(source, dest, area=None, special_flags = 0)
参数:
- source:表示要粘贴的 Surface 对象
- dest:主窗口中的一个标识的坐标位置,可以接受一个 (x,y) 元组,或者 (x,y,width,height) 元组,也可以是一个 Rect 对象
- area:接受一个 Rect 对象,默认为 None,如果提供该参数则相当于抠图操作,即在屏幕的指定区域显示想要的内容
- special_flags:可选参数,它是 Pygame.1.8 版本新增的功能,用于指定对应位置颜色的混合方式,参数值有 BLEND_RGBA_ADD、BLEND_SUB 等。如果不提供该参数的情况下,默认使用 source 的颜色覆盖 screen 的颜色
注意:
- 使用blit方法后,要使用update或flip方法更新界面
4、 其他功能
方法名称 | 说明 |
---|---|
pygame.display.get_surface() | 获取当前显示的 Surface 对象。 |
pygame.display.flip() | 更新整个待显示的 Surface 对象到屏幕上。 |
pygame.display.update() | 更新部分软件界面显示。 |
pygame.display.Info() | 产生一个 VideoInfo 对象,包含了显示界面的相关信息。 |
pygame.display.set_icon() | 设置左上角的游戏图标,图标尺寸大小为 32*32。 |
pygame.display.iconify() | 将显示的主窗口即 Surface 对象最小化,或者隐藏。 |
pygame.display.get_active() | 当前显示界面显示在屏幕上时返回 True,如果窗口被隐藏和最小化则返回 False。 |
三、 Surface
1、 创建图像
pygame 针对文本、图像、颜色提供了不同模块来生成它们各自的 Surface 对象。Surface 模块是Pygame 中专门用来新建图像的,通过该模块可以创建一个 Surface 对象,语法格式如下 :
surface = pygame.Surface(size=(width,height),flags,depth)
参数:
- size:表示 Surface 对象的矩形区域大小;如果不设置尺寸,Surface 默认创建一个和主游戏屏幕同样大小的区域
- flags:功能标志位,有两个可选参数值 HWSURFACE 和 SPCALPHA,前者代表将创建的 Surface 对象存放于显存中,后者表示让图像的每一个像素都包含一个 alpha 通道
- depth:指定像素的颜色深度,默认为自适应模式,由 Pygame 自动调节
2、 加载图像
语法:
img = pygame.image.load("file_path").convert()
注意:
- 此处之所以使用 convert()来转换被加载图片的像素格式,是为了提升 Pygame 对图片的处理速度,该操作能够保证图像的像素格式与图片的显示格式是相同的
通过 image.load() 方法可以加载游戏的背景图,或者游戏中使用的其他元素,比如的人物、道具等等。
如:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: A.L.Kun
# @file: surface_.py
# @time: 2022/4/19 10:02
from pygame.locals import *
import pygame
from sys import exit
# 初始化界面
pygame.init()
# 创建一个窗口
screen = pygame.display.set_mode((300, 300), 0)
# 设置标题
pygame.display.set_caption("Surface对象")
# 使得主窗口的界面为纯白色
screen.fill((255, 255, 255))
# 创建一个Surface对象
surface = pygame.Surface((20, 20), flags=pygame.HWSURFACE)
# 对象填充粉色
surface.fill("pink")
# 加载一个图像对象
img_background = pygame.image.load("./img/background.png").convert()
# 添加事件循环
while True:
# 循环获取事件,监听事件
for event in pygame.event.get():
# 判断用户是否点了关闭按钮
if event.type == pygame.QUIT:
# 卸载所有模块
pygame.quit(