Pygame是一个强大的游戏库,适合做2D游戏。参考一位前辈的博客(感谢)学了一下pygame库,正在学习中,对pygame有了大致了解,于是记记笔记。
主要内容: pygame游戏程序基本框架、pygame库的基本函数、在pygame运行窗口绘图
一、pygame程序基本框架
程序的基本框架如下图所示:
# 导入模块
import pygame, sys
from pygame.locals import *
# pygame 的初始化
pygame.init()
# 设置游戏标题、导入图象元素
pygame.display.set_caption("Draw rabbit")
screen = pygame.display.set_mode((640,480), 0, 32)
sprite = pygame.image.load("rabbit.png")
# 游戏主循环
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
screen.fill((200,225,225))
screen.blit(sprite, (260,180))
pygame.display.update()
程序主要包含3部分,模块的导入、设置游戏窗口和基本元素、游戏主循环。
二、代码说明:
1、pygame模块的导入
# 导入模块
import pygame, sys
from pygame.locals import *
同math、numpy、request等库一样,使用pygame之前先import 导入,pygame.locals包含了pygame需要使用的各种常量(如:QUIT、K_ESCAPE等),在使用前我们将它们全部导入到程序中。
链接:pygame常用模块
2、pygame的初始化
# pygame 的初始化
pygame.init()
在使用pygame的函数之前都应当先调用该函数进行初始化。
3、对游戏窗口的设置
# 设置游戏标题、导入图象元素
pygame.display.set_caption("name")
screen = pygame.display.set_mode((640,480), 0, 32)
set_caption:设置pygame窗口的标题名称为name
set_mode:该函数返回一个surface对象,包含3个参数,第一个参数为设置窗口的宽(width)和高(height),第二个参数为标志位,具体如下表,第三个参数为色深。
标志位 | 功能 |
---|---|
FULLSCREEN | 创建一个全屏窗口 |
RESIZABLE | 创建一个可以改变大小的窗口 |
NOFRAME | 创建一个没有边框的窗口 |
4、检测事件
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
上面的代码中使用了pygame.event.get(),该函数返回个事件列表,for语句将最近发生的事件遍历访问。若时间类型为QUIT(QUIT为pyame.locals的一个常量),则退出游戏并关闭窗口。
5、绘制图形
screen = pygame.display.set_mode((640,480), 0, 32)
sprite = pygame.image.load("rabbit.png")
while True:
process()
screen.fill((200,225,225))
screen.blit(sprite, (260,180))
pygame.display.update()
pygame.image.load():将图像信息转化为surface对象,对于RGBA色彩模式的图片,默认保留通道信息,即可显示透明部分,也可以像下面这样写:
# 不会保留通道信息
sprite = pygame.image.load("rabbt.png").convert()
# 可以保留通道信息
sprite = pygame.image.load("rabbit.png").convert_alpha()
fill:screen调用fill((200,255,255))函数,将(200,255,255)表示的颜色填充到screen中
blit:screen调用了blit()函数,函数参数为sprite和一个二元组(表示绘制的位置),即在screen上的对应位置上绘制sprite。(坐标(0,0)为窗口左上角,x、y坐标向右下方增大)
update:在使用完blit()函数之后,务必记得使用update函数刷新屏幕,否则屏幕一片漆黑
ps:update() 与 flip() 的区别:
flip函数 | update函数 |
---|---|
仅仅绘制窗口中有变化的区域 | 重新绘制整个窗口 |
变化区域小时,速度较快 (推荐) | 速度较慢 |
适用于仅仅几个物体在移动 | 适用于场景变化频繁的窗口 |
三、效果预览
运行效果如图:
第一篇pygame学习笔记完结 cheers! ?
附上:代码压缩包
提取码:okgv
参考博客:用Python和Pygame写游戏-从入门到精通
图标引用:Iconfont