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 pygamepygame.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.mzph.cn/news/867549.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLOv8改进 | 注意力机制 | 结合静态和动态上下文信息的注意力机制

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

力扣双指针算法题目:双数之和,三数之和,四数之和

目录 一:双数之和 1.题目: 2.思路解析 3.代码 二:三数之和 1.题目 2.思路解析 3,代码 三:四数字之和 1.题目 2.思路解析 3.代码 一:双数之和 1.题目: 输入一个递增排序的数组和一…

贵州建筑三类人员安全员2024年考试最新题库练习题

一、单选题 1.建设工程安全管理的方针是()。 A.安全第一,预防为主,综合治理 B.质量第一,兼顾安全 C.安全至上 D.安全责任重于泰山 答案:A 2.安全生产管理的根本目的是()。 A.…

Lunaproxy与711Proxy的对比与优劣分析

今天我们来深入对比两款在市场上备受关注的代理IP服务:Lunaproxy和711Proxy。接下来,我们将从多个角度对这两款服务进行详细分析,帮助大家做出明智的选择。 优势分析 711Proxy的优势 1. 性价比高:711Proxy提供多种灵活的套餐选…

伪元素content追加文字使用小技巧

E::before和E::after本身的作用是追加字&#xff0c;直接在文字后面追加链接 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

AI文本转语音,再也不用担心视频配音了.

文章目录 简介代码实现调用开通百度付费包 简介 背景 我想要将文本,转为语音,然后配上图片,这样就可以很快生成一个视频. 可以说是配音吧,我还是比较喜欢通过代码来自动化.所以今天就来实现一下,同时做一下分享和记录.目标 通过python代码,自动将文本转为配音.平台 我选择了百…

万界星空科技MES系统中的排版排产功能

在当今高度竞争的市场环境中&#xff0c;企业对于生产管理的效率和质量要求日益提高。作为智能制造的重要组成部分&#xff0c;制造执行系统&#xff08;MES&#xff09;以其强大的功能&#xff0c;在提升企业生产能力方面发挥着不可替代的作用。万界星空科技作为行业领先的智能…

MongoDB集群搭建-最简单

目录 前言 一、分片概念 二、搭建集群的步骤 总结 前言 MongoDB分片&#xff08;Sharding&#xff09;是一种水平扩展数据库的方法&#xff0c;它允许将数据分散存储在多个服务器上&#xff0c;从而提高数据库的存储容量和处理能力。分片是MongoDB为了应对大数据量和高吞吐量需…

Science期刊政策反转:允许生成式AI用于论文写作,意味着什么?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 关于各大top期刊和出版社对于生成式AI用于论文写作中的规定&#xff0c;娜姐之前写过一篇文章&#xff1a; 如何合理使用AI写论文&#xff1f;来看Top 100学术期刊和出版社的…

深度解析 Raft 分布式一致性协议

本文参考转载至&#xff1a;浅谈 Raft 分布式一致性协议&#xff5c;图解 Raft - 白泽来了 - 博客园 (cnblogs.com) 深度解析 Raft 分布式一致性协议 - 掘金 (juejin.cn) raft-zh_cn/raft-zh_cn.md at master maemual/raft-zh_cn (github.com) 本篇文章将模拟一个KV数据读写服…

【漏洞复现】禅道——未授权登入(QVD-2024-15263)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 禅道&#xff08;Zentao&#xff09;是一款开源的项目管理和协作…

死锁-活锁与活锁的预防、死锁与死锁的预防和检测(处理死锁的方式:事务等待图)

一、引言 1、死锁是因采用封锁技术实现并发控制而产生的一种运行事务被阻塞或等待的现象 2、如果利用严格两阶段封锁协议来解决我们前面提到的“更新丢失”这种数据不一致问题&#xff0c;非串行调度中的事务T1首先获得数据对象X上的读锁并开始执行&#xff0c;随后事务T2也获…

数值分析笔记(五)线性方程组解法

三角分解法 A的杜利特分解公式如下&#xff1a; u 1 j a 1 j ( j 1 , 2 , ⋯ , n ) , l i 1 a i 1 / u 11 ( i 2 , 3 , ⋯ , n ) , u k j a k j − ∑ m 1 k − 1 l b m u m j ⇒ a k j ( j k , k 1 , ⋯ , n ) , l i k ( a i k − ∑ m 1 k − 1 l i n u m k ) /…

uniapp 在手机上导出excel

1.创建excelDev.js文件 export default {exportExcel(fileData, documentName excel) {plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {let rootObj fs.rootlet fullPath rootObj.fullPathconsole.log("开始导出数据")// 创建文件夹rootObj…

破解宇宙终极奥秘,战胜昊天无上束缚

在幽邃的暗夜下&#xff0c;细品着夫子与昊天跨越千年的智勇交锋&#xff0c;我的思绪不禁飘向了更加深远的宇宙边际&#xff0c;回响起那些关于人类如何挑战天命、战胜上天的过往。 宇宙奥秘 在浩瀚无垠的宇宙深渊中&#xff0c;隐藏着一段超越凡尘的规则。昊天&#xff0c;…

2025湖北武汉智慧教育装备信息化展/智慧校园展/湖北高博会

2025武汉教育装备展,2025武汉智慧教育展,2025武汉智慧校园展,2025武汉教育信息化展,2025武汉智慧教室展,湖北智慧校园展,湖北智慧教室展,武汉教学设备展,湖北高教会,湖北高博会 2025湖北武汉智慧教育装备信息化展/智慧校园展/湖北高博会 2025第10届武汉国际教育装备及智慧校园…

计算机网络——数据链路层(以太网扩展、虚拟局域网、高速以太网)

在许多情况下&#xff0c;我们希望把以太网的覆盖范围扩展。本节先讨论在物理层把以太网扩展&#xff0c;然后讨论在数据链路层把以太网扩展。这种扩展的以太网在网络层看来仍然是一个网络。 在物理层扩展以太网 现在&#xff0c;扩展主机和集线器之间的距离的一种简单方法就是…

jmeter-beanshell学习3-beanshell获取请求报文和响应报文

前后两个报文&#xff0c;后面报文要用前面报文的响应结果&#xff0c;这个简单&#xff0c;正则表达式或者json提取器&#xff0c;都能实现。但是如果后面报文要用前面请求报文的内容&#xff0c;感觉有点难。最早时候把随机数写在自定义变量&#xff0c;前后两个接口都用这个…

小暑节气,选对劳保鞋,让安全与清凉同行

在七月炽热的阳光下&#xff0c;我们迎来了二十四节气中的小暑&#xff0c;标志着盛夏时节的正式开始。随着气温的节节攀升&#xff0c;不仅大自然万物进入了生长的旺季&#xff0c;我们的工作与日常生活也面临着新的挑战——如何在高温环境下保障自身安全&#xff0c;成为了不…

实例演示kafka stream消息流式处理流程及原理

以下结合案例&#xff1a;统计消息中单词出现次数&#xff0c;来测试并说明kafka消息流式处理的执行流程 Maven依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-streams</artifactId><exclusio…