python游戏库pygame经典教程_pygame教程

本文详细介绍了如何使用Pygame构建游戏,包括程序初始化、Surface对象的创建和操作、事件监听与处理、游戏循环、Display模块的使用、Surface图像创建与变形、时间控制以及事件模块和区域位置的处理。
摘要由CSDN通过智能技术生成

一.Pygame程序基本搭建过程

1.初始化化程序

2.创建Surface对象

3.事件监听

4.游戏循环

二.Pygame Display显示模块详解

1.将Surface对象粘贴至主窗口上

2.设置窗口主窗口

3.填充主窗口背景,参数值RGB

4.设置窗口标题

5.更新屏幕内容

6.pygame.display其他方法

三.Pygame Surface创建图像

1.Surface模块创建图像

2.Surface从外部加载图像

四.Pygame Transform图像变形

五.Pygame Time时间控制

1.游戏暂停

2.设置游戏的帧数率(FPS)

六.Pygame Rect区域位置

七.Pygame Event事件模块

1.事件类型

2.事件处理方法

3.处理键盘事件

4.处理鼠标事件

八.Pygame Dra绘图函数

1.绘制矩形

2.绘制多边形

3.绘制圆形

4.绘制椭圆形

5.绘制圆弧曲线

6.绘制直线

九.字体绘制

十.音频播放


一.Pygame程序基本搭建过程

Pygame搭建游戏窗口主要为如下几步

1.初始化化程序

在使用Pygame编程之前,我们要对程序进行初始化,代码如下

pygame.init()

该代码是整个程序的第一句代码,它的作用是自动检测Pygame软件包是否正常,并完成包括display(显卡模块),font(字体模块),mixer(声音模块),cursors(光标控制模块)等的模块的初始化


2.创建Surface对象

Surface是Pygame编程的窗口界面,类似画布,图像和文本可以显示在Surface上,创建方式主要有以下方式

(1)创建Surface对象:

#也可以叫做screen对象,本质上是一个Surface对象
screen = pygame.display.set_mode(400,400)

(2)创建一个带文本的Surface对象:

#创建一个包含文字的Surface对象
text = f.render("小马哥不马虎",True,(255,255,255),(0,0,0))
#通过blit方法将其绘制出来,textRect表示位置坐标
screen.blit(text,textRect)

(3)创建一个包含图像的Surface对象:

surface_image = pygame.image.load("图片路径")

3.事件监听

一个好的游戏少不了游戏与人的交互,通过事件,人按自己的想法对游戏进行交互

如下是一个关闭游戏的简单交互:

#所有get()获取事件
for event in pygame.event.get():
    #判断事件类型
    if event.type == pygame.QUIT:
        pygame.quit()

4.游戏循环

代码:

while True:
    for event in pymage.event.get():
        if event.type == pygame.QUIT:
            pymage.quit()
            sys.exit()
    #更新并绘制屏幕内容
    pygame.display.flip()

二.Pygame Display显示模块详解

Pygame使用pygame.display显示模块中的方法创建游戏的主窗口:

格式:

screen = pygame.display.set_mode(size=(),flags=0)

·size:用来设置窗口的大小

·flags:功能标志位,表示创建的主窗口样式,flags参数如下:

flags参数
| 标志位 | 功能 |
| pygame.FULLSCREEN | 创建一个全屏窗口 |
| pygame.HWSURFACE | 创建一个硬件加速窗口,必须和FULLSCREEN同时使用 |
| pygame.OPENGL | 创建一个OPENGL渲染窗口 |
| pygame.RESIZABLE | 创建一个可以改变大小的窗口 |
| pygame.DOUBLEBUF | 创建一个双缓冲窗口,建议在HWSURFACE或OPENGL时使用 |
| pygame.NOFRAME | 创建一个没有边框的窗口 |

1.将Surface对象粘贴至主窗口上

代码:

scrren.blit(source,dest,area=None,special_flage=0)

·source:表示要粘贴的Surface对象

·dest:主窗口一个标识的坐标位置

·area:接受一个Rect对象,默认为None,如果提供该参数则相当于抠图操作,即在屏幕的指定位置显示想要的内容

·special_flags:可选参数,用于指定对应位置颜色的混合方式


2.设置窗口主窗口
screen = pygame.display.set_mode(400,400)

3.填充主窗口背景,参数值RGB
screen.fill((156,156,156))

4.设置窗口标题
pygame.display.set.caption('小马哥不马虎')

5.更新屏幕内容
pygame.display.flip()

6.pygame.display其他方法
方法名称说明
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

三.Pygame Surface创建图像
1.Surface模块创建图像

语法格式:

Surface=pygame.Surface(size=(width,height),flags,depth)

·size:表示Surface对象的矩形区域大小

·flage:功能标志位,有两个可选参数值HWSURFACE和SPCALPHA,前者代表将创建的Surface对象存放于显存中,后者表示让图像的每一个像素包含一个alpha通道

·depth:指定像素的颜色深度,默认为自适应模式,由Pygame自动调节

代码实例:

import pygame
import sys

pygame.init()
#设置主窗口
screen = pygame.display.set_mode((400,400))
screen.fill('blue')
#设置窗口标题
pygame.display.set_caption('小马哥不马虎')
#创建一个图像
face = pygame.Surface((60,60),flags=pygame.HWSURFACE)
#填充图像
face.fill(color='pink')
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    #将图像添加到主屏幕上
    screen.blit(face,(100,100))
    #更新屏幕内容
    pygame.display.flip()

效果:


2.Surface从外部加载图像

语法格式:

pygame.image.load('图片路径').convert()

代码实例:

import pygame
import sys

pygame.init()
#设置主窗口
screen = pygame.display.set_mode((400,400))
screen.fill('white')
#设置窗口标题
pygame.display.set_caption('小马哥不马虎')
#加载图片
image_surface = pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)
image_surface.scroll(100,60)  #移动图片
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            pygame.quit()
            sys.exit()
    #将图像添加到主屏幕上
    screen.blit(image_surface,(0,0))
    #更新屏幕内容
    pygame.display.flip()

效果图:

Surface模块处理图像方法:

方法说明
pygame.Surface.blit()将一个图像绘制到另一个图像上
pygame.Surface.convert()修改图像的格式
pygame.Surface.fill()使用纯色填充Surface图像
pygame.Surface.scroll()复制并移动Surface对象
pygame.Surface.set_alpha()设置整个图像的透明度
pygame.Surface.get_at()获取一个像素的颜色值
pygame.Surface.set_at()设置一个像素的颜色值
pygame.Surface.get_palette()获取Surface对象8位索引的调色板
pygame.Surface.map_rgb()将一个RGBA颜色转换为映射的颜色值
pygame.Surface.set_clip()设置该Surface对象的剪切区域
pygame.Surface.subsurface()根据父对象创建一个新的子Surface对象
pygame.Surface.get_offset()获取子Surface对象在父对象中的偏移量
pygame.Surface.get_size()获取Surface对象的大小

四.Pygame Transform图像变形

Transform方法
| 方法 | 说明 |
| pygame.transform.scale() | 将图片缩放至指定的大小,并返回一个新的Surface对象 |
| pygame.transform.rotate() | 将图片旋转至指定角度 |
| pygame.transform.rotozoom() | 以角度旋转图像,同时将图像缩小或放大至指定的倍数 |


五.Pygame Time时间控制
1.游戏暂停

Pygame.time模块提供以下常用方法

方法说明
pygam.time.get_ticks()以毫秒为单位获取时间
pygame.time.wait()使程序暂停一段时间
pygame.time.set_time()创建一个定时器,即每隔一段时间就去执行一些动作
pygame.time.Clock()创建一个时间对象来帮助我们确定游戏要以多大的帧数运行

代码实例:

import pygame
pygame.init()
screen =pygame.display.set_mode((500,400))
pygame.display.set_caption('时间设置')
#获取时间
t=pygame.time.get_ticks()
#暂停游戏3000毫秒
t1=pygame.time.wait(3000)
print(t1)
image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
while True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exit()
        screen.blit(image_surface,(0,0))
        pygame.display.update()

效果:三秒后加载图片


2.设置游戏的帧数率(FPS)

Clock()方法可以实现对游戏帧数的设置

方法说明
pygame.time.Clock.tick()更新clock对象
pygame.time.Clock.get_time()获取上一个tick中的时间
pygame.time.Clock.get_fps()计算clock对象的帧数

代码实例:

import pygame
pygame.init()
screen =pygame.display.set_mode((500,400))
pygame.display.set_caption('时间设置')
#获取时间
t=pygame.time.get_ticks()
#暂停游戏3000毫秒
t1=pygame.time.wait(3000)
print(t1)
image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')
#创建时间对象
clock = pygame.time.Clock()
while True:
    #通过时间对象指定循环帧数,每秒循环60次
    clock.tick(60)
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            exit()
        screen.blit(image_surface,(0,0))
        pygame.display.update()

注:游戏帧数中在动态图时才显现出来


六.Pygame Rect区域位置

Rect()方法创建一个指定位置,指定大小的矩形区域

语法格式:

Rect=pygame.Rect(left,top,width,height)

代码实例:

import pygame
pygame.init()
screen = pygame.display.set_mode((500,300))
pygame.display.set_caption('小马哥不马虎')
image_surface = pygame.image.load("C:/Users/myun/Pictures/bg.jpg")
rect1 = pygame.Rect(50,50,100,100)
# 在原图的基础上创建一个新的子图(surface对象)
image_child= image_surface.subsurface(rect1)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    #在屏幕上显示子图的区域
    screen.blit(image_child,rect1)
    pygame.display.update()

效果:在图片上截取了一个和Rect1同样大小的矩形区域

Rect对其他常用方法:

方法说明
pygame.Rect.copy()复制矩形
pygame.Rect.move()移动矩形区域,接受一个列表参数
pygame.Rect.move_ip()移动矩形(无返回)
pygame.Rect.inflate()增大或缩小矩形
pygame.Rect.clamp()将矩形移动到另一个矩形内
pygame.Rect.union()返回两个矩形合并后的矩形
pygame.Rect.fit()按横纵比调整矩形或移动矩形
pygame.Rect.contains()测试一个矩形是否在另个矩阵内
pygame.Rect.collidepoint()测试点是否在矩形中
pygame.Rect.colliderect()测试两个矩形是否重叠

七.Pygame Event事件模块
1.事件类型

通过事件类型,可以有序的,逐一的处理用户的操作

事件
| 事件类型 | 描述 | 成员属性 |
|         QOUIT | 用户按下窗口的关闭按钮 | none |
| ATIVEEVENT | Pygame被激活或者隐藏 | gain,state |
|  KEYDOWN | 键盘按下 | unicode,key,mod |
| KEYUP | 键盘释放 | key,mod |
| MOUSEMOTION | 鼠标移动 | pos,rel,button |
| MOUSEBUTTONDOWN | 鼠标按下 | pos,button |
| MOUSEBUTTONUP | 鼠标放开 | pos,button |
| JOYAXISMOTION | 游戏手柄(Joystick or pad)移动 | joy,axis,value |
| JOYBALLMOTION | 游戏球(Joy  ball)移动 | joy,axis,value |
| JOYHATMOTION | 游戏手柄(Joystick)移动 | joy,axis,value |
| JOYBUTTONDOWN | 游戏手柄按下 | joy,button |
| JOYBUTTONUP | 游戏手柄放开 | joy,button |
| VIDEORESIZE | pygame窗口缩放 | size,w,h |
| VIDEOEXPOSE | Pygame窗口部分公开 | none |
| USEREVENT | 触发一个用户事件 | 事件代码 |


2.事件处理方法

Pygam.event模块提供了处理事件的常用方法,如下:

方法说明
pygame.event.get()从事件队列获取一个事件,并在事件队列中删除该事件
pygame.event.wait()阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态
pygame.event.set_blocked()控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入
pygame.event.pump()调用该方法后,Pygame会自动处理事件队列
pygame.event.poll()会根据实际情况返回一个真实的事件,或者一个None
pygame.event.peek()检测某类事件是否在队列中
pygame.event.clear()从队列中清除所有的事件
pygame.event.get_blocked()检测某一类型的事件是否被禁止进入队列
pygame.event.post()放置一个新的事件在队列中
pygame.event.Event()创建一个用户自定义的事件
pygame.event.set_allowed()控制哪些事件允许进入队列

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值