Pygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏,主要是为了开发2D游戏而生。具有免费、开源,支持多种操作系统,具有良好的跨平台性等优点。
在开始学习Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行中安装
pip install pygame
输入以下代码检测pygame是否安装成功
import pygame
pygame.ver
模块名 | 功能 |
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.rect | 管理矩形区域 |
pygame.sndarray | 操作声音数据 |
pygame.sprite | 操作移动图像 |
pygame.surface | 管理图像和屏幕 |
pygame.surfarray | 管理点阵图像数据 |
pygame.time | 管理时间和帧信息 |
pygame.transform | 缩放和移动图像 |
pygame.init() 是 Pygame 库中的初始化函数,它用于初始化 Pygame 的各种子模块和设置,以准备创建游戏或图形应用程序。调用 pygame.init() 的目的是确保 Pygame 环境正确准备好,以便在程序中使用 Pygame 的各种功能。
这个函数通常在程序的开始处调用,以确保 Pygame 能够正常工作。在调用 pygame.init() 之后,你可以使用 Pygame 的各种模块来处理图形、音频、事件等。例如,你可以创建游戏窗口、加载图像、播放音频等操作。
一旦初始化完成,你可以开始使用 Pygame 编写游戏逻辑并启动游戏循环。请注意,一旦初始化完成,你也可以通过 pygame.quit() 来清理 Pygame 环境和资源,通常是在程序结束时使用,以确保资源被正确释放。
初始化时显示
pygame.init()
pygame.init():该代码是整个程序的第一句代码,它的作用是自动检测Pygame软件包是否正常,并完成包括display(显卡模块),font(字体模块),mixer(声音模块),cursors(光标控制模块)等的模块的初始化
pygame.display.set_mode():创建一个窗口或屏幕,其大小由(width, height)指定,width表示窗口宽度,height代表屏幕高度。这个函数返回一个Surface对象,代表了整个屏幕。
Surface是Pygame的编程窗口,像一个画布一样,能在上面进行显示,图像和文本能显示在Surface上
screen = pygame.display.set_mode((800, 600))
# 设置字体
f = pygame.font.Font(None, 36)
# 创建包含文字的Surface对象
text = f.render("简单的Pygame窗口", True, (255, 255, 255), (0, 0, 0))
# 获取文本的大小并创建一个合适的Rect
textRect = text.get_rect()
textRect.topleft = (100, 50) # 设置文本的左上角位置
# 通过blit方法将其绘制出来
screen.blit(text, textRect)
import pygame
pygame.init()
screen = pygame.display.set_mode((800, 600))
image = pygame.image.load('155410.png')
screen.blit(image, (0, 0)) # 图像左上角在窗口的(0, 0)坐标
pygame.display.flip() # 更新整个屏幕的显示
#所有get()获取事件
for event in pygame.event.get():
#判断事件类型
if event.type == pygame.QUIT:
pygame.quit()
利用 for event in pygame.event.get对上次调用后所有事件进行遍历,其中pygame.envent.get()会获取pygame事件队列里面的所有事件,并返回一个事件列表(这些事件可能包括按键按下、鼠标点击、窗口关闭等用户或系统的交互动作)
if event.type == pygame.QUIT,此语句是用来检测当前遍历的事件是否属于pygame.QUIT类型(pygame.QUIT类型是一种特殊的事件类型,一般当用户点击窗口关闭按钮是pygame会产生该事件)
pygame.quit是一个很重要的函数,这个函数用于正确的关闭pygame库,并且释放资源退出程序
游戏循环的作用
while True:
for event in pymage.event.get():
if event.type == pygame.QUIT:
pymage.quit()
sys.exit()
#更新并绘制屏幕内容
pygame.display.flip()
while True: 这是一个无限循环,通常用于创建游戏循环。游戏循环是一个持续运行的循环,用于处理游戏逻辑,更新游戏状态和绘制图形。
for event in pygame.event.get(): 这是一个事件处理循环。它迭代遍历通过 pygame.event.get() 函数获取的所有事件。Pygame 会将各种事件(例如按键按下、鼠标移动、窗口关闭等)存储在一个事件队列中,通过这个循环可以处理这些事件。
if event.type == pygame.QUIT:这是一个条件语句,用于检查事件的类型是否为窗口关闭事件。pygame.QUIT 是一个表示窗口关闭事件的常量。
pygame.quit(): 如果检测到窗口关闭事件,这行代码会调用 pygame.quit() 函数,用于清理 Pygame 环境和资源,以确保程序正确退出。这会关闭 Pygame 窗口并释放游戏资源。
sys.exit():这是一个用于退出程序的函数。它会终止程序的执行,退出游戏循环,从而结束程序的运行。
pygame.display.flip(): 这行代码用于更新屏幕内容。在游戏循环中,通常会进行游戏状态的更新和图形的绘制,然后使用 pygame.display.flip() 来刷新屏幕,以显示最新的游戏画面。
函数书写格式
#写法一
window = pygame.display.set_mode(size=(),flags=0)
#size:用来设置窗口的大小
#flags:功能标志位,表示创建的主窗口样式
#写法二
window_size = (800, 600)
# 创建游戏窗口
window = pygame.display.set_mode(window_size)
标志位 | 功能 |
pygame.FULLSCREEN | 创建一个全屏窗口 |
pygame.HWSURFACE | 创建一个硬件加速窗口,必须和FULLSCREEN同时使用 |
pygame.OPENGL | 创建一个OPENGL渲染窗口 |
pygame.RESIZABLE | 创建一个可以改变大小的窗口 |
pygame.DOUBLEBUF | 创建一个双缓冲窗口,建议在HWSURFACE或者OPENGL时候使用 |
pygame.NOFRAME | 创建一个没有边框的窗口 |
# 导入Pygame库
import pygame
# 导入sys库,用于退出程序
import sys
# 初始化Pygame
pygame.init()
# 定义窗口大小和标题
screen_width = 1600 # 窗口宽度
screen_height = 1000 # 窗口高度
screen = pygame.display.set_mode((screen_width, screen_height)) # 创建一个游戏窗口
pygame.display.set_caption("简单的Pygame窗口") # 设置窗口标题
# 加载图像
image = pygame.image.load("屏幕截图 2024-01-15 155410.png") # 加载一个图像文件(请替换成你的图像文件路径)
# 进入主循环
while True:
for event in pygame.event.get(): # 获取Pygame事件
if event.type == pygame.QUIT: # 如果事件类型是窗口关闭
pygame.quit() # 退出Pygame
sys.exit() # 退出程序
# 在窗口上绘制图像
screen.blit(image, (0, 0)) # 将加载的图像绘制到窗口左上角(坐标 (0, 0))
# 更新屏幕内容
pygame.display.flip() # 刷新窗口,显示最新的游戏画面
这是一个完整的代码窗口创建流程,其中
# 在窗口上绘制图像
screen.blit(image, (0, 0)) # 将加载的图像绘制到窗口左上角(坐标 (0, 0))
这行代码是在游戏窗口上绘制一个图像,且图像的坐标为(0,0),而image是需要导入的Surface对象
# 定义窗口大小和标题
screen_width = 1600 # 窗口宽度
screen_height = 1000 # 窗口高度
screen = pygame.display.set_mode((screen_width, screen_height)) # 创建一个游戏窗口
pygame.display.set_caption("简单的Pygame窗口") # 设置窗口标题
通过定义两个参数screen_width = 1600,screen_height = 1000对窗口的大小进行限定;利用screen = pygame.display.set_mode((screen_width, screen_height))来创建窗口;pygame.display.set_caption("简单的Pygame窗口")来对窗口进行命名
# 填充窗口背景为灰色
screen.fill((156, 156, 156))
# 更新屏幕内容
pygame.display.flip() # 刷新窗口,显示最新的游戏画面
通过pygame中的display.flip方法来对窗口的内容进行更新,以显示最新的画面
方法名称 | 说明 |
pygame.display.get_surface() | 获取当前显示的Surface对象 |
pygame.display.flip() | 更新整个待显示的Surface对象到屏幕上 |
pygame.display.update() | 更新部分软件界面显示 |
pygame.display.lnfo() | 产生一个VideInfo对象,包含了显示界面的相关信息 |
pygame.display.set_icon() | 设置左上角的游戏图标,图标尺寸大小为32*32 |
pygame.display.iconify() | 将显示的主窗口即Surface对象最小化,或者隐藏 |
pygame.display.get_active() | 当前显示界面显示在屏幕上时返回True,如果窗口被隐藏和最小化时则返回False |
import pygame
import sys
# 初始化Pygame
pygame.init()
# 定义窗口大小和标题
screen_width = 1600
screen_height = 1000
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("简单的Pygame窗口")
# 创建一个新的Surface对象
width = 200 # 新Surface的宽度
height = 200 # 新Surface的高度
flags = pygame.SRCALPHA # 使用SRCALPHA标志以支持Alpha透明度
depth = 32 # 32位颜色深度
new_surface = pygame.Surface((width, height), flags, depth)
# 加载图像
image = pygame.image.load("屏幕截图 2024-01-15 155410.png") # 加载一个图像文件(请替换成你的图像文件路径)
# 进入主循环
while True:
for event in pygame.event.get(): # 获取Pygame事件
if event.type == pygame.QUIT: # 如果事件类型是窗口关闭
pygame.quit() # 退出Pygame
sys.exit() # 退出程序
# 在新Surface上绘制图像
new_surface.fill((255, 0, 0)) # 填充新Surface为红色背景
new_surface.blit(image, (0, 0)) # 将加载的图像绘制到新Surface的左上角
# 填充窗口背景为灰色
screen.fill((156, 156, 156))
# 在窗口上绘制新Surface
screen.blit(new_surface, (100, 100)) # 将新Surface绘制到窗口的(100, 100)位置
# 更新屏幕内容
pygame.display.flip() # 刷新窗口,显示最新的游戏画面
# 创建一个新的Surface对象
width = 50 # 新Surface的宽度
height = 50 # 新Surface的高度
flags = pygame.SRCALPHA # 使用SRCALPHA标志以支持Alpha透明度
depth = 32 # 32位颜色深度
new_surface = pygame.Surface((width, height), flags, depth)
# 格式 Surface=pygame.Surface(size=(width,height),flags,depth)
# size:表示Surface对象的矩形区域大小
# flage:功能标志位,有两个可选参数值HWSURFACE和SPCALPHA,前者代表将创建的Surface对象存放于显存中,后者表示让图像的每一个像素包含一个alpha通道
# depth:指定像素的颜色深度,默认为自适应模式,由Pygame自动调节
pygame.SRCALPHA 是Pygame库中的一个特殊标志,用于在创建新的Surface对象时指示该Surface具有Alpha透明度支持。具体来说,SRCALPHA表示要为新的Surface分配一个Alpha通道,以便你可以控制每个像素的透明度。
Alpha透明度是指图像的每个像素的透明程度或不透明程度。Alpha通道是图像中存储每个像素Alpha透明度值的一种方式。它通常是一个独立的颜色通道,与红、绿和蓝通道一起组成了一个像素的颜色。每个像素都有一个与之关联的Alpha通道值,用于表示该像素的透明度。
引入外部图像的代码
image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png')
# 加载一个图像文件
完整代码:
import pygame # 导入Pygame库
import sys # 导入sys库,用于退出程序
pygame.init() # 初始化Pygame
# 设置主窗口
screen = pygame.display.set_mode((800, 600)) # 创建一个800x600像素的游戏窗口
screen.fill('white') # 填充窗口背景为白色
# 设置窗口标题
pygame.display.set_caption('简单的Pygame窗口') # 设置游戏窗口标题为'简单的Pygame窗口'
# 加载图片
image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png') # 加载一个图像文件
# 填充图片的指定区域为蓝色
image_surface.fill((0, 0, 255), rect=(100, 100, 100, 50), special_flags=0)
# 上面这行代码的作用是将加载的图像的指定区域(矩形区域,左上角坐标为(100, 100),宽度为100像素,高度为50像素)填充为蓝色。
image_surface.scroll(100, 60) # 移动图片
# 上面这行代码的作用是将加载的图像向右移动100像素,向下移动60像素。
while True:
for event in pygame.event.get(): # 获取Pygame事件
if event.type == pygame.QUIT: # 如果事件类型是窗口关闭
pygame.quit() # 退出Pygame
sys.exit() # 退出程序
# 将图像添加到主屏幕上
screen.blit(image_surface, (0, 0)) # 将加载的图像绘制到主窗口的左上角(0, 0)位置
# 更新屏幕内容
pygame.display.flip() # 刷新窗口,显示最新的游戏画面
运行结果:
方法 | 说明 |
pygame.transform.scale() | 将图片缩放至指定的大小,并返回一个新的Surface对象 |
pygame.transform.rotate() | 将图片旋转至指定角度 |
pygame.transform.rotozoom() | 以角度旋转图像,同时将图像缩小或放大至指定的倍数 |
import pygame
import sys
pygame.init()
# 设置主窗口
screen = pygame.display.set_mode((800, 600))
screen.fill((255, 255, 255)) # 白色背景
# 设置窗口标题
pygame.display.set_caption('简单的Pygame窗口')
# 加载图片
image_surface = pygame.image.load('E:\超级玛丽\屏幕截图 2024-01-15 155410.png')
# 初始化滚动变量
scroll_x = 0
scroll_y = 0
last_update_time = pygame.time.get_ticks()
while True:
# 检查退出事件
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# 获取当前时间
current_time = pygame.time.get_ticks()
# 每隔100毫秒滚动一次图片
if current_time - last_update_time > 100:
last_update_time = current_time
scroll_x += 10 # 每次水平滚动10像素
scroll_y += 5 # 每次垂直滚动5像素
image_surface.fill((0, 0, 255), rect=(100, 100, 100, 50), special_flags=0)
image_surface.scroll(scroll_x, scroll_y)
# 将图像添加到主屏幕上
screen.blit(image_surface, (0, 0))
# 更新屏幕内容
pygame.display.flip()
在上面的代码中,last_update_time = pygame.time.get_ticks() 的作用是用来记录上一次更新操作的时间点。在游戏循环中,首先获取当前的毫秒数时间戳,使用 pygame.time.get_ticks() 函数得到 current_time 变量。然后,通过计算 current_time - last_update_time 来确定自上一次更新操作以来经过了多少毫秒时间。
如果经过的时间超过了100毫秒(即 current_time - last_update_time > 100),就执行一次图像的滚动操作。接着,将 last_update_time 更新为当前时间,以便下一次循环中继续计算时间间隔。last_update_time 变量的作用是跟踪上一次图像滚动操作的时间点,以便在控制每次滚动的时间间隔时使用,确保图像以恰当的速度滚动。
import pygame # 导入pygame库
pygame.init() # 初始化pygame
# 创建一个窗口,尺寸为500x400像素
screen = pygame.display.set_mode((500, 400))
# 设置窗口的标题为'时间设置'
pygame.display.set_caption('时间设置')
# 获取当前时间(自pygame初始化以来的毫秒数)
t = pygame.time.get_ticks()
# 暂停游戏3000毫秒(3秒)
t1 = pygame.time.wait(3000)
# 打印暂停时间(这里应该是3000,因为pygame.time.wait返回的是暂停的毫秒数)
print(t1)
# 加载一张图片(确保文件路径正确)
image_surface = pygame.image.load('E:\\超级玛丽\\屏幕截图 2024-01-15 155410.png')
# 进入游戏的主循环
while True:
# 遍历所有的事件
for event in pygame.event.get():
# 如果事件类型是QUIT(例如点击了关闭窗口的按钮),则退出程序
if event.type == pygame.QUIT:
exit()
# 将加载的图片绘制到窗口的(0,0)位置
screen.blit(image_surface, (0, 0))
# 更新整个屏幕的显示
pygame.display.update()