[六点]Pygame零基础入门:极简开发框架
参考
Pygame官方文档
嵩天教授的Python游戏开发教程
前言
在入门游戏开发时,pygame框架可以快速协助开发小型游戏。轻松而愉快的开始是从玩游戏到做游戏的关键,游戏的设计思想是游戏娱乐性的核心,在此之后有更高追求或下定决心进入游戏行业,再开始系统学习UNITY挑战3D游戏,是比较好的入门路线。
极简框架
- 事件部分
- 初始化及循环开始
- 事件接收及响应
- 绘制部分
- 图片
- FPS
- 文字
极简框架代码
'''
初始化及循环开始
'''
import pygame,sys
pygame.init()
screen=pygame.display.set_mode((600,400))
pygame.display.set_caption("Hello Pygame!")
'''
事件接收及响应
'''
while True:
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
pygame.display.update()
初始化部分
- init()初始化
- 初始化游戏中的全局变量
- 定义色彩、fps等全局常量
- 自定义定义功能性函数
- 设置窗口大小
- 进入游戏窗口
事件部分
接受事件
pygame自动捕捉键盘动作和鼠标动作,包括按下或松开等游戏中常用的事件触发输入。pygame使用一个长度为128的队列以此存储这些事件,使用pygame.event.get()可以将当前队列中的事件全部取出。
如果单次处理比较缓慢,而事件输入较多,超过128的事件则无法进入队列,可以使用pygame的set_blocked,set_allowed两个函数限定能进入队列的事件。比如说某游戏只对鼠标触发的事件进行反应,那么纯粹键盘触发的事件则不必放入队列。
处理事件
使用for遍历这些事件,并使用if-elif分支语句对事件进行判断,pygame具有分级的状态常量供判断,如KEY_DOWN(键盘按下),KEY_a(键盘按下a)。下面从官方文档中列出一些大类,JOY开头表示游戏手柄的事件触发:
QUIT none
ACTIVEEVENT gain, state
KEYDOWN unicode, key, mod
KEYUP key, mod
MOUSEMOTION pos, rel, buttons
MOUSEBUTTONUP pos, button
MOUSEBUTTONDOWN pos, button
JOYAXISMOTION joy, axis, value
JOYBALLMOTION joy, ball, rel
JOYHATMOTION joy, hat, value
JOYBUTTONUP joy, button
JOYBUTTONDOWN joy, button
VIDEORESIZE size, w, h
VIDEOEXPOSE none
USEREVENT code
绘制部分
识别框
pygame很多绘制操作需要用到矩形rect识别框,当然pygame也支持选择线、椭圆、多边形面(polygon)等更复杂的几何图形,但矩阵已经足以确定主图层的绘制区域。
"""
导入图片与自动获取识别框
"""
item = pygame.image.load('/item.png')
item_rect = item.get_rect()
游戏的画面实际上是不断刷新的一张张静止图,每次绘制静止图,物品可能出现在不同的位置,所以通过改变rect的位置,然后在rect中绘制物品的图片,即可实现物品运动的动画效果。
FPS
注意到最外层的while True循环在不同的机器上执行的速度是不一样的,有些机器速度快,非事件触发的背景动态图将会以更快的速度变化,有一点像在电脑中运行街机游戏开金手指让速度加快(说金手指可能有点暴露年龄,当年玩口袋妖怪二刷时加速比骑单车省不少时间- 。-)。
事件运算的速度无法控制,但可以控制画面更新的速度,所以设置一个FPS,并在初始化部分和while True循环的最后分别加上以下控制FPS的代码:
#初始化部分
fps = 100
fcclock = pygame.time.Clock()
#while True循环的最后
fcclock.tick(fps)
文字绘制
文字实际上也是绘制像素点,根据fonts中的样式,pygame可以在画面中绘制不同的字体,
fontObj = pygame.font.Font('wfyh.ttf', 48)# 微软雅黑
textSurfaceObj = fontObj.render('我永远喜欢xxx', True, GREEN, BLUE)# 配置要显示的文字
textRectObj = textSurfaceObj.get_rect()# 获得要显示的对象的rect
textRectObj.center = (200, 150)# 设置显示对象的坐标
DISPLAYSURF.fill(WHITE)# 设置背景
DISPLAYSURF.blit(textSurfaceObj, textRectObj)# 绘制文字
公众号:六点一刻研习室
(兴趣使然,不定时更新一些有用的东西,质量没有保障)