[六点]Pygame零基础入门:极简开发框架

[六点]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)# 绘制文字

公众号:六点一刻研习室
(兴趣使然,不定时更新一些有用的东西,质量没有保障)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,273评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,349评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,709评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,520评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,515评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,158评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,755评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,660评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,203评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,287评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,427评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,122评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,801评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,272评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,393评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,808评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,440评论 2 359

推荐阅读更多精彩内容