Python学习笔记30:进阶篇(十九)pygame的使用之显示与窗口管理

前言

基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。

我们的下一步目标是完成python crash course中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。

私信我发送消息python资料,领取python crash course中文版PDF。

pygame

Pygame是一个开源的Python多媒体开发库,专门用于开发2D游戏。它是Python编程语言的一个扩展,基于 SDL (Simple DirectMedia Layer) 库,提供了丰富的功能来处理图形、声音、事件处理等游戏开发所需的基本要素,使得创建游戏变得更加简单直接。

简单了解一下模块特性和功能:

  • 图形渲染:Pygame提供了基本的绘图功能,如绘制线条、圆形、矩形等,以及加载和显示图像。
  • 事件处理:它允许程序响应用户输入,如键盘按键、鼠标移动和点击等事件。
  • 声音效果和音乐:支持加载和播放声音文件,包括背景音乐循环播放。
  • 碰撞检测:提供了简单的碰撞检测功能,帮助游戏判断物体之间的接触和碰撞。
  • 定时器和延时:可以设置定时器来执行周期性任务或控制游戏帧率。
  • 视频播放:虽然不是主要功能,Pygame也能处理一些基本的视频播放需求。
  • 面向对象设计:Pygame的API设计鼓励面向对象编程,便于构建复杂的交互式游戏元素。
  • 跨平台:Pygame可在多个操作系统上运行,包括Windows、Mac OS X和各种Linux发行版,这使得开发的游戏具有良好的可移植性。

pygame模块的简单易学的同时功能也十分强大,是我们初级python开发者学习开发游戏的热门选择,同样也有许多具备丰富开发经验的开发者用于快速原型制作或者小型项目的实现。

常用函数

主要介绍一下pygame或者库中处理其他内容的模块的常用函数。

  • 基础函数
  • 显示与窗口管理
  • 事件处理
  • 图像处理
  • 颜色与字体
  • 输入处理
  • 时间与帧率控制
  • 音频

这些都是比较基础的功能,但是这些功能已经满足我们编写一些小的游戏项目了。

基础函数

  1. init()。
    初始化函数,通常在程序开始时调用。这个函数没啥,你游戏启动模块第一行写上就是了。
  2. quit()
    关闭并清理所有pygame模块,通常在程序结束的时候调用。这个函数也没啥,就是你需要关闭你的游戏程序的时候,不要忘记调用这个函数就行。
import pygame


pygame.init()
pygame.quit()

没有很特殊的地方,就不执行了。

这两个函数就是pygame中初始化模块功能和清理模块的函数,是必不可少的两个函数。

显示与窗口管理

pygame允许你新建一个窗口,并对窗口进行管理。这些功能主要依赖于pygame.display模块。

  1. pygame.display.init()
    功能:初始化显示模块
  2. pygame.display.quit()
    功能:退出显示模块
  3. pygame.display.set_mode
    功能:创建并返回一个新的显示窗口。
    • 参数说明
      • resolution (tuple) - 这是窗口的尺寸,通常以像素为单位的一个二元组 (width, height)。例如 (800, 600) 表示创建一个宽800像素、高600像素的窗口。
      • flags (int, 可选) - 控制窗口的显示模式和其他特性。常见的标志位包括但不限于:
        • pygame.FULLSCREEN - 全屏模式。
        • pygame.RESIZABLE - 窗口大小可调整。
        • pygame.NOFRAME - 无边框窗口。
        • pygame.DOUBLEBUF - 启用双缓冲,提高绘图性能。
          这些标志位可以通过按位或(|)操作组合使用。
      • depth (int, 可选) - 指定颜色的位深度,通常不需要设置,默认值足够大多数情况使用。
      • display (int, 可选) - 指定在哪个显示器上创建窗口,对于多显示器系统可能有用。默认值为0,表示主显示器。
      • vsync (int, 可选) - 垂直同步选项,控制画面刷新是否与显示器的刷新率同步。0 表示不启用垂直同步,非零值(通常是1)表示启用。在某些版本的 pygame 中,此参数可能不被支持或有不同实现。
    • 返回值
      函数返回一个 pygame.Surface 对象,这是窗口的显示 Surface。你可以在这个 Surface 上进行绘图操作,如绘制图像、文本、形状等。所有对这个 Surface 的更改,最终都需要通过 pygame.display.flip() 或 pygame.display.update() 来更新到屏幕上。

简单使用一下:

# 最基础的用法
pygame.display.set_mode((800, 600))

# 点击关闭退出程序,这个后面再讲,代码可以先写上。
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()

在这里插入图片描述
执行发现弹出一个了pygame window。这个就是我们上面打开的窗口。然后使用其他参数创建窗口看看效果,这里不再赘述。

  1. pygame.display.set_caption(title)
    功能:设置窗口的标题栏文本。
    参数:title - 窗口标题字符串。
    返回值:无
pygame.display.set_caption("明月望秋思")

在这里插入图片描述
窗口名称已经变成了我们设置的名称,不是默认的pygame window。

  1. pygame.display.get_caption()
    功能:获取当前窗口的标题。
    参数:无
    返回值:一个包含当前窗口标题的元组。
title = pygame.display.get_caption()
print(title)

在这里插入图片描述
6. pygame.display.set_icon(icon_surface)
功能:设置窗口的图标。
参数:icon_surface - 作为图标的 pygame.Surface 对象。通常使用pygame.image.load来加载图标。
返回值:无

# 加载图标图像
icon = pygame.image.load('1.png')

# 确保图标尺寸适合(通常推荐16x16, 32x32, 48x48, 64x64等)
# 如果需要,可以调整图标大小
icon = pygame.transform.scale(icon, (64, 64))
pygame.display.set_icon(icon)

在这里插入图片描述
可以看到窗口的图标已经发生了改变。

设置图标的时候使用了部分图片处理的函数,这里后面再仔细讲。

  1. pygame.display.flip()
    功能:更新整个显示表面。
    参数:无
    返回值:无

这个函数简单来说就是刷新整个窗口,通常在游戏循环中用与更新窗口屏幕,单独调用这个函数没啥意义,这里就不展示了。

  1. pygame.display.update(rectangle=None)
    功能:更新指定区域或整个屏幕。
    参数:
    rectangle - 要更新的区域的矩形(可选)。如果不提供,则更新整个屏幕。
    返回值:无

这个函数和flip函数类似,但是这个函数可以单独更新某个矩形区域。这里也不单独示例,后面用到再讲。

  1. pygame.display.get_surface()
    功能:获取当前的显示 Surface。
    参数:无
    返回值:一个 pygame.Surface 对象,代表当前的显示窗口。

  2. pygame.display.iconify()
    功能:最小化窗口。
    参数:无
    返回值:无

  3. pygame.display.toggle_fullscreen()
    功能:切换窗口的全屏状态。
    参数:无
    返回值:无

  4. pygame.display.Info()
    功能:获取当前显示设备的信息。
    参数:无
    返回值:一个包含显示设备信息(如分辨率、色彩深度等)的 DisplayInfo 对象

info = pygame.display.Info()
print(info)

在这里插入图片描述
这个函数和前面的9,10,11三个一样,都没啥特殊的点要说,有用到再仔细介绍。

以上12个函数,就是关于pygame中窗口的常见操作了。

结尾

pygame常用的模块还有好几个,整体的顺序是窗口操作,图形绘制和图片填充,事件监听和输入操作,音频操作,字体颜色和时间处理。这些学完就正式开始学习外星人入侵项目。

作业

  1. 创建一个窗口,命名和设置图片。设置全屏,设置可切换并进行切换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/778196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Labview] Excel读表 输出表单中选中的单元格内容

简而言之 循环外 是读取excel文件,并写入labview表格 循环内 会输出表格中被选中的单元格内容 属性节点:编辑位置 如果需要改写单元格内容并储存替换Excel,可见这篇:[Labview] 改写表格内容并储存覆盖Excelhttps://blog.csdn.ne…

tongweb 部署软航流版签一体化应用示例 提示跨域错误CORS ERROR

目录 问题现象与描述 解决办法 原理解析 什么是CORS 浏览器跨域请求限制 跨域问题解决方法 跨域请求流程 浏览器请求分类解析 http请求方法简介 问题现象与描述 重庆软航科技有限公司提供了一套针对针对word、excel等流式文件转换成PDF版式文件并进行版式文件在线签章…

【虚幻引擎】UE4初学者系列教程开发进阶实战篇——生存游戏案例

一、课程体系 1 学前必读 2 Character类相关基础 -人物移动控制 -动画蓝图 3 常见游戏机制基础 -碰撞器、触发器 -物体使用接口 -视角切换 4其他相关设计 -背包系统 -锻造系统 -物体破碎效果 -简易种植系统 -互动物体动画 5课程结语 二、UI部分 思维导图部分 实操部分 …

Matplotlib Artist Axes

在简介里介绍了很多了,这里补充一点 Axes包含一个属性patch,是Axes对应的方框,可以用来设置Axes的相关属性 ax fig.add_subplot() rect ax.patch # a Rectangle instance rect.set_facecolor(green) Axes有以下方法 Axes helper metho…

第15章 奇异值分解:习题解答及其案例

这一章初学建议看该视频学习,讲得歪瑞古德: 《统计学习方法》李航 第15章奇异值分解 1.矩阵的奇异值分解是指将 m n m \times n mn实矩阵 A A A表示为以下三个实矩阵乘积形式的运算 A U Σ V T A U \Sigma V ^ { T } AUΣVT 其中 U U U是 m m m阶正…

第9章 项目总结01:项目流程,每个模块的介绍

1 请介绍一下你的项目 学成在线项目是一个B2B2C的在线教育平台,本项目包括了用户端、机构端、运营端。 核心模块包括:内容管理、媒资管理、课程搜索、订单支付、选课管理、认证授权等。 下图是项目的功能模块图: 项目采用前后端分离的技…

软件测试与开发流程

软件测试简介 软件测试是对软件进行检测和评估,以确定其是否满足所需结果的过程和方法。它是在规定的条件下对程序进行操作,发现程序错误,从而衡量软件质量,并对其是否满足设计要求进行评估的过程。 与计算机系统操作有关的计算机…

生物化学笔记:电阻抗基础+电化学阻抗谱EIS+电化学系统频率响应分析

视频教程地址 引言 方法介绍 稳定:撤去扰动会到原始状态,反之不稳定,还有近似稳定的 阻抗谱图形(Nyquist和Bode图) 阻抗谱图形是用于分析电化学系统和材料的工具,主要有两种类型:Nyquist图和B…

跟《经济学人》学英文:2024年06月01日这期 The side-effects of the TikTok tussle

The side-effects of the TikTok tussle tussle:美 [ˈtəsəl] 激烈扭打;争夺 注意发音 side-effects:副作用;(side-effect的复数) As the app’s future hangs in the balance, the ramifications of …

2024年中国十大杰出起名大师排行榜,最厉害的易经姓名学改名字专家

在2024年揭晓的中国十大杰出易学泰斗评选中,一系列对姓名学与国学易经有深入研究的专家荣登榜单。其中,中国十大权威姓名学专家泰斗顶级杰出代表人物的师傅颜廷利大师以其在国际舞台上的卓越贡献和深邃学识,被公认为姓名学及易经起名领域的权…

关于linux服务器更改镜像后连接不上vscode问题

问题样子解决办法直接看 问题样子 问题描述:从centos换到ubantu后,xshell能直接连接上(没有更改ssh配置信息),但是vscode连不上(配置文件因为端口号和ip是一样的,也没法改) 猜测…

SwinUnet详解

文章目录 摘要一. 编码端模块1. PatchEmbed2. SwinTransformerBlock2.1. Window_partition2.2. WindowAttention2.3. Window_reverse2.4. MLP 3. PatchMerging 二. 解码端模块三. 完整流程图 摘要 swinunet基本结构: swinunet采用编码器-解码器结构: 编…

vulnhub靶场之Jarbas

1 信息收集 1.1 主机发现 arp-scan -l 发现主机IP地址为:192.168.1.16 1.2 端口发现 nmap -sS -sV -A -T5 -p- 192.168.1.16 存在端口22,80,3306,8080 1.3 目录扫描 dirsearch -u 192.168.1.16 2 端口访问 2.1 80端口 2.2…

[单master节点k8s部署]20.监控系统构建(五)Alertmanager

prometheus将监控到的异常事件发送给Alertmanager,然后Alertmanager将报警信息发送到邮箱等设备。可以从下图看出,push alerts是由Prometheus发起的。 安装Alertmanager config文件 [rootmaster prometheus]# cat alertmanager-cm.yaml kind: ConfigMa…

FreeRTOS——队列集

一、队列集 一个队列只允许任务间传递的消息为 同一种数据类型 ,如果需要在任务间 传递不同数据类型的消息 时,那么就可以使用队列集 作用:用于对多个队列或信号量进行“监听”(接收或获取),其中 不管哪一…

返回值处理器器【Spring源码学习】

定义返回值类型处理器的组合; public static HandlerMethodReturnValueHandlerComposite getReturnValueHandler(){HandlerMethodReturnValueHandlerComposite composite new HandlerMethodReturnValueHandlerComposite();// 处理ModelAndViewcomposite.addHandle…

Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制

文件的读取、显示、存取 cv2.imread(imagepath,IMREAD.xxx) 读取图像cv2.imshow(窗口名称,mat图片) 显示图像cv2.imwrite(保存的位置,img) 保存图像 # 1. 读取图像 原始图片路径,图片读取模式 cv2.imread(imagepath,IMREAD.xxx)cv2.IMREAD_COLOR 彩色模式读取 cv2…

三、数据库系统(考点篇)试题

聚簇索引,也叫簇类索引,原理是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序于聚簇索引的索引页面指针指向数据页面,所以使用聚簇索引查找数据几乎总是比使用非聚簇索引快。每张表只能建一个聚簇索引,并且建聚簇索引需…

Mysql慢日志、慢SQL

慢查询日志 查看执行慢的SQL语句,需要先开启慢查询日志。 MySQL 的慢查询日志,记录在 MySQL 中响应时间超过阀值的语句(具体指运行时间超过 long_query_time 值的SQL。long_query_time 的默认值为10,意思是运行10秒以上(不含10秒…

MYSQL 四、mysql进阶 6(索引的创建与设计原则)

一、索引的声明和使用 1.1 索引的分类 MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。 从 功能逻辑 上说,索引主要有 4 种,分别是普通索引、唯一索引、主键索引、全文索引。 按照 物理实现方式 ,索引可…