当前位置: 首页 > news >正文

python pygame库的略学

文章目录

  • 概述
  • 1. pygame的初始化和退出
  • 2. 创建游戏窗口
      • (1)set_mode()
      • (2)set_capyion()
      • (3)update()
  • 3. 游戏循坏与游戏时钟
  • 4. 图形和文本绘制
      • (1)图形绘制
      • (2)文本绘制
  • 5. 元素位置控制
      • (1)pygame图形窗口的坐标体系
      • (2)Rect类
  • 6. 动态效果
  • 总结


概述

pygame 是为开发2D游戏而设计的Python跨平台模块,该模块中定义了很多接口,开发人员使用这些接口可以方便时间游戏开发的常用功能。例如,图形和图像绘制,播放音频等。


提示:以下是本篇文章正文内容,下面案例可供参考

1. pygame的初始化和退出

在使用Pygame开发游戏或图形界面应用时,初始化和退出是整个程序生命周期中非常关键的两个步骤。其初始化和退出的函数为:

函数作用
init()一次性初始化pygame的所有模块,故开发程序时开发人员无须单独调用,每个子模块的初始化方法,可以直接使用子模块
quit()卸载之前被初始化的所有pygame模块,在python程序退出前,解释器会释放所有模块,quit()函数并非必须调用,但程序开发秉持谁申请,谁释放的原则,因此程序开发人员应当在需要时主动调用quit()函数卸载所有模块资源

代码示例:

import pygamedef main():# 初始化Pygame所有模块pygame.init()# 这一步骤会加载所有必要的系统资源,# 包括音频、视频、事件处理等支持,确保后续能正常使用Pygame的功能。# ... 其他游戏相关的设置和循环代码 ...# 游戏主循环结束后,进行资源清理pygame.quit()# 可选地,如果你希望彻底清理Pygame的所有资源,还可以调用以下命令# pygame.display.quit()  # 关闭显示部分,不卸载所有模块# sys.exit()  # 强制退出整个程序,但这不是必需的,因为程序结束时Python会自动清理资源# 调用main函数启动程序
if __name__ == "__main__":main()

2. 创建游戏窗口

由于命令行窗口中无法绘制图形,若要开发带有图形界面的游戏,程序应先创建一个图形界面窗口,pygame通过displag子模块创建图形界面窗口。常见的函数有:

函数作用
set_mode()初始化游戏窗口
set_capyion()设置窗口标题
update()更新屏幕显示内容

(1)set_mode()

语法:

set_mode(resolution=(0,0),flages=0,depth=0)->Surface
参数解释
resolution以元组的形式储存,主要指窗口的分辨率,指定图形窗口的宽和高,单位为像素。
flages标志位,用于设置窗口特性,默认为0
depth色深,该参数只取整,取值范围为[8,32]

(2)set_capyion()

set_capyion(title,icontitle=None)  ->None
参数解释
title字符类型
icontitle设置显示在任务栏上的程序标题,一般默认为None,与title一致

(3)update()

用于刷新窗口,以显示修改后的新窗口。


代码示例:

# 导入模块
import pygame# 定义窗口高度和宽度、颜色
WIN_WIDTH = 658
WIN_HEIGHT = 243
BG_COLOR = (125,125,0)
def main():# 初始化模块pygame.init()# 创建窗体,即创建SurfaceWINSET=pygame.display.set_mode((WIN_WIDTH,WIN_HEIGHT))# 为窗口填充背景色WINSET.fill(BG_COLOR)# 设置窗口标题pygame.display.set_caption('小游戏')# 刷新窗口pygame.display.update()# 卸载所有模块pygame.quit()if __name__ =='__main__':main()

3. 游戏循坏与游戏时钟

游戏启动一般时由玩家手动关闭,但目前的程序在开启图形窗口并设置标题后便退出,这是因为程序已经执行完毕,若要使游戏继续执行,需要在程序中添加一个无限循环。

在pygame.display.update()之后添加循环代码,程序会一直保持执行。一般情况下,计算机上1s绘制60帧便能够达到非常连续,高品质的动画效果。换句话说,就是窗口刷新图像的频率只要不低于每秒60帧。过高意味着超高的负荷,为了降低循环执行频率,需要在程序设置时间钟(游戏时间钟)。

代码示例:

# 导入模块
import pygame# 定义窗口高度和宽度、颜色
WIN_WIDTH = 658
WIN_HEIGHT = 243
BG_COLOR = (125,125,0)FPS=60
def main():# 初始化模块pygame.init()# 创建窗体,即创建SurfaceWINSET=pygame.display.set_mode((WIN_WIDTH,WIN_HEIGHT))# 为窗口填充背景色WINSET.fill(BG_COLOR)# 设置窗口标题pygame.display.set_caption('小游戏')# 设置游戏时间钟,创建Colock对象FPSCOLOCK = pygame.time.Clock()# 刷新窗口pygame.display.update()# 利用无线循环i=0while True:i=i+1print(i)# 控制帧率FPSCOLOCK.tick(FPS)# 卸载所有模块pygame.quit()if __name__ =='__main__':main()

注意:这是一个死循环代码


4. 图形和文本绘制

图形化窗口时绘制文本和图形的前提,创建窗口后便可在其中绘制文本、图形等元素。

(1)图形绘制

  1. 加载图片
    将图片读取到程序中,该步骤需要使用pygame库中的image模块的load()函数。语法如下:
load(filename) ->Surface
参数解释
filename待加载图片的文件名
  1. 绘制图片
    绘制图片本质上时将一个Surface对象叠加在另一个Surface对象上,这种不同尺寸的叠加可以通过blit()函数完成,语法如下:
blit(source,dest,area=None,special_flags=0) -> Rect
参数解释
source接收被绘制的Surface对象
dest接收一个表示位置的元组,该元组指定left和top2个值,left和top分别表示图片距离窗口左边和顶部的距离,可接收一个表示矩形的元组(left,top,width,height)(left和top表示矩形位置,width和height表示矩形宽高)
area可选参数,用于设置矩形区域
special_flags标志位

(2)文本绘制

pygame的font模块提供了一个Font类,使用该类可以创建系统字体对象,进而实现游戏窗口中文字的绘制。

  1. 创建字体对象
    调用font模块的Font()函数可以创建一个字体对象,Font()函数语法如下:
Font(filename,size) ->Font
参数解释
filename设置字体对象的字体(字体的位置路径)
size设置字体对象的大小

拓展
也可以通过font模块中的SysFont()函数创建一个系统字体对象。SysFont()函数语法如下:

SysFont(name,size,bold=False,italic=False) ->Font
参数解释
name系统字体名称,可通过pygame.font.get_fonts()函数获取当前操作系统所有的字体列表
size字体大小
bold是否设置为粗体,默认为Flase,表示不设置
italic是否设置为斜体,默认为Flase,表示不设置
  1. 渲染文本内容
    渲染是计算机绘图中使用的名词,经渲染后计算机中会生成一张图像(SurFace对象)。渲染的函数render()语法如下:
render(text,antialias,color,background=None) ->Surface
参数解释
text文字内容
antialias是否抗锯齿(抗锯齿会让文字看起来更平滑)
color文字颜色
background背景颜色
  1. 绘制渲染到游戏主窗口

绘制文本图片同样使用Surface的blit()方法。


代码示例:

# 导入模块
import pygame,time# 定义窗口高度和宽度、颜色
WIN_WIDTH = 658
WIN_HEIGHT = 243
# 设置颜色变量
BG_COLOR = (125,125,0)
MS_COLOR=(95,200,255)
MSGBG_COLOR=(23,78,20)FPS=60
def main():# 初始化模块pygame.init()# 创建窗体,即创建SurfaceWINSET=pygame.display.set_mode((WIN_WIDTH,WIN_HEIGHT))# 为窗口填充背景色WINSET.fill(BG_COLOR)# 设置窗口标题pygame.display.set_caption('小游戏')# 加载图片image=pygame.image.load('D:/Software/pycharm/网页请求/小游戏/image/wallhaven-j5mj3w_1920x1080.png')# 绘制图片WINSET.blit(image,(0,0))# 创建字体对象BASICFONT=pygame.font.Font("D:/Software/字体/思源黑体/字体文件/SourceHanSansCN-Bold.otf",25)# 渲染字体msg_surf=BASICFONT.render('初始化…',True,MS_COLOR,MSGBG_COLOR)# 绘制渲染到游戏窗口WINSET.blit(msg_surf,(0,0))# 设置游戏时间钟,创建Colock对象FPSCOLOCK = pygame.time.Clock()# 刷新窗口pygame.display.update()# 睡眠十秒time.sleep(10)# 利用无线循环i=0while True:i=i+1print(i)# 控制帧率FPSCOLOCK.tick(FPS)# 卸载所有模块pygame.quit()if __name__ =='__main__':main()

5. 元素位置控制

前文绘制的图像和文本都在(0,0)位置,也就是图形窗口的原点。但游戏中的文字和图片可能出现在窗口的任意位置,若想要准确地放置图片和文本,需要先掌握pygame图形窗口的坐标体系和pygame的Rect类等知识。

(1)pygame图形窗口的坐标体系

定义如下:

  • 坐标原点在游戏窗口的左上角
  • x轴与水平方向平行,以向右为正
  • y轴与垂直方向平行,以向下为正

(2)Rect类

用于描述和控制可见对象(文本、图片等)在pygame窗口中的位置显示
类的构造方法如下

__init__(x,y,width,height) ->Rect

6. 动态效果

大多数游戏都涉及动态效果;实现动态效果的原理是文本或者图片的更换,位置的改变和屏幕的刷新。基础的动态效果分为:

  • 多次修改Surface对象绘制的位置并连续绘制、刷新 ,实现移动效果
  • 在同一位置绘制不同的Surface对象,实现动画效果。
  • 连续绘制不同Surface对象的同时,修改绘制的位置,实现移动的动画

总结

本次章节是为初学者了解pygame模块提供的,为了更有效的学习pygame内容,我也是为此总结了一章节,制作小游戏的七大重要步骤,在此我只做出了前六步解释,最后一步是 : 事件与事件处理
下期为最后一步做出详细解释以及拓展小游戏案例
谢谢大家的支持!🌈🌈

相关文章:

python pygame库的略学

文章目录 概述1. pygame的初始化和退出2. 创建游戏窗口(1)set_mode()(2)set_capyion()(3)update() 3. 游戏循坏与游戏时钟4. 图形和文本绘制(1)图形绘制(2)文…...

大模型日报2024-04-09

大模型日报 2024-04-09 大模型资讯 苹果预告超越ChatGPT的新AI模型ReaLM 摘要: 苹果公司最新宣布,即将推出一款名为ReaLM的人工智能模型。这款AI技术在理解复杂屏幕用户指令方面表现出高超的能力,并能与用户进行自然流畅的对话。ReaLM的推出预示着苹果在…...

抖音视频如何下载保存(方法分享)

有时刷抖音视频,看的喜欢的视频想要下载到本地,但是有很多视频无法下载或者下载下来是有水印的,那怎么办呢?   抖音视频下载有两种情况: 一种是可以直接点击分享下载,然后可以直接点击保存到相册。 视频就自动下载…...

MySQL-用户与权限管理:用户管理、权限管理、角色管理

用户与权限管理 用户与权限管理1.用户管理1.1 登录MySQL服务器1.2 创建用户1.3 修改用户1.4 删除用户1.5 设置当前用户密码1.6 修改其它用户密码 2. 权限管理2.1 权限列表2.2 授予权限的原则2.3 授予权限2.4 查看权限2.5 收回权限 访问控制连接核实阶段请求核实阶段 3. 角色管理…...

Vue.js中如何使用Vue Router处理浏览器返回键的功能

在Vue.js中,Vue Router默认提供了处理浏览器返回键的功能。当用户点击浏览器的返回键时,Vue Router会自动导航到历史记录中的上一个路由。然而,如果你想自定义返回键的行为或者在特定的页面上进行特殊处理,你可以使用Vue Router的…...

QT drawPixmap和drawImage处理图片模糊问题

drawPixmap和drawImage显示图片时,如果图片存在缩放时,会出现模糊现象,例如将一个100x100 的图片显示到30x30的区域,这个时候就会出现模糊。如下: 实际图片: 这个问题就是大图显示成小图造成的像素失真。 当…...

YOLOv9改进策略 :小目标 | 新颖的多尺度前馈网络(MSFN) | 2024年4月最新成果

💡💡💡本文独家改进:多尺度前馈网络(MSFN),通过提取不同尺度的特征来增强特征提取能力,2024年最新的改进思路 💡💡💡创新点:多尺度前馈网络创新十足,抢先使用 💡💡💡如何跟YOLOv8结合:1)放在backbone后增强对全局和局部特征的提取能力;2)放在detect…...

从零开始:一步步学习爬虫技术的实用指南(一)

从零开始:一步步学习爬虫技术的实用指南(一) Urllib1.什么是互联网爬虫2.爬虫核心3.爬虫的用途4.爬虫的分类4.1 通用爬虫:4.1 聚焦爬虫: 5.反爬手段5.1 User‐Agent:5.2.代理IP5.3.验证码访问5.4.动态加载网…...

Python面向对象详解

文章目录 类和继承变量保护类装饰器 类和继承 Python虽然以函数式著称,但在Python中,万物皆对象,其对面向对象编程是有着非常不错的支持的。类是面向对象的核心数据类型,下面代码就创建了一个Person类。 class Person:count 0d…...

思维题锻炼-最小数字

思维题锻炼-最小数字 目录题目描述输入样例输出样例代码 目录 题目描述 给一串数字&#xff0c;求出最小的整数&#xff0c;不能是原数字串中的数字&#xff0c;也不能由数字串中的数字相加得到 输入样例 5 2 1输出样例 4代码 #include<bits/stdc.h> #include<s…...

ubuntu20.04 运行 lio-sam 流程记录

ubuntu20.04 运行 lio-sam 一、安装和编译1.1、安装 ROS11.2、安装 gtsam1.3、安装依赖1.4、下载源码1.5、修改文件1.6、编译和运行 二、官方数据集的运行2.1、casual_walk_2.bag2.2、outdoor.bag、west.bag2.3、park.bag 三、一些比较好的参考链接 记录流程&#xff0c;方便自…...

P5356 [Ynoi2017] 由乃打扑克

我手把手教她打扑克 qwq 综合分析一下2个操作&#xff0c;查找区间第k小的值&#xff0c;感觉可以用主席树&#xff0c;区间修改那没事了 考虑分块做法,块长B 分析第一个操作 只需要维护数列的单调性&#xff0c;然后二分答案上二分就ok了 分析第二个操作 维护一个加法懒…...

随机潮流应对不确定性?计及分布式发电的配电系统随机潮流计算程序代码!

前言 随着分布式电源在电力系统中所占比例的不断扩大,研究分布式发电对系统稳态运行的影响势在必行。带分布式发电的潮流计算常常用来评估其并网后对系统的影响&#xff0c;同时它也是分析分布式发电对电网稳定性的影响等其他理论研究工作的基础。然而&#xff0c;许多分布式发…...

Oracle表空间满清理方案汇总分享

目录 前言思考 一、第一种增加表空间的数据文件数量达到总容量的提升 二、第二种解决方案针对system和sysaux的操作 2.1SYSTEM表空间优化 2.2sysaux表空间回收 2.2.1针对sysaux的表空间爆满还有第二套方案维护 三、第三种解决方案使用alter tablespace resize更改表空间的…...

基于单片机数码管20V电压表仿真设计

**单片机设计介绍&#xff0c;基于单片机数码管20V电压表仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机数码管20V电压表仿真设计的主要目的是通过单片机和数码管显示电路实现一个能够测量0到20V直流电压的电…...

SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介绍模型…...

C++——优先级队列

前言&#xff1a;这篇文章我们继续来分享一个c的容器——优先级队列。 一.理解优先级 何为优先级一说&#xff1f;实际上就是有顺序的意思。 优先级队列&#xff0c;即有顺序的队列&#xff0c;是一个无需我们自己进行排序操作&#xff0c;在数据传入时就会由容器自己排好序的…...

docker部署jumpserver

1、安装Docker以及相关依赖 配置yum源 sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin2、添加国…...

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时&#xff0c;terminal窗口太小怎么办&#xff1f;看起来非常累眼睛&#xff0c;本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求&#xff1a; 通过上图可知&#xff0c;UART默认使用的是xterm。因此&#xff0c;我们需要修改xterm的默认字体设…...

003 静态代理

文章目录 StudentServiceImplStudentService.javaStudentServiceProxy.javaStudentServiceProxy1.javaStudentServiceProxyTest.java StudentServiceImpl package com.aistart.service.impl;import com.aistart.mapper.StudentMapper; import com.aistart.pojo.Student; import…...

等保测评后,我的CentOS/Ubuntu服务器安全加固清单还加了这些

等保测评后&#xff0c;我的CentOS/Ubuntu服务器安全加固清单还加了这些 在完成等保测评基础整改后&#xff0c;许多安全工程师常陷入"合规即安全"的误区。实际上&#xff0c;等保要求只是安全基线的最低标准。本文将分享我在实际运维中积累的合规之上的实战加固技巧…...

华为交换机MAC地址漂移检测与风暴抑制联动配置指南

1. 华为交换机MAC地址漂移检测原理与实战 刚接触网络运维时&#xff0c;第一次遇到MAC地址漂移报警简直一头雾水。后来才发现&#xff0c;这其实是交换机在提醒我们&#xff1a;"兄弟&#xff0c;你的网络里可能有环路&#xff01;" MAC地址漂移的本质是同一个MAC地址…...

资源处理效率工具RePKG:从问题解决到场景创新的实战指南

资源处理效率工具RePKG&#xff1a;从问题解决到场景创新的实战指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg 在数字创意和开发工作中&#xff0c;我们经常遇到各种专用格式的…...

如何跨越语言盲区,让学术表达精准落地

当我们完成了精妙的实验设计&#xff0c;获得了宝贵的数据&#xff0c;准备向世界展示科研成果时&#xff0c;却常常在“最后一公里”遭遇阻碍。这种阻碍并非源于科研本身的深度&#xff0c;而是来自于语言表达的信心不足与自查盲区。你是否也有过这样的经历&#xff1a;对着屏…...

Janus-Pro-7B效果展示:手写体/表格/多语言混合OCR识别准确率实测

Janus-Pro-7B效果展示&#xff1a;手写体/表格/多语言混合OCR识别准确率实测 1. 引言 你有没有遇到过这样的场景&#xff1f;翻出一张老照片&#xff0c;背面是长辈用钢笔写下的寄语&#xff0c;字迹有些潦草&#xff0c;想把它转成电子版保存&#xff0c;却一个字也认不出来…...

5步释放游戏潜能:面向玩家的原神帧率解锁完全指南

5步释放游戏潜能&#xff1a;面向玩家的原神帧率解锁完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 一、问题发现&#xff1a;为什么你的高端显卡在原神中无法全力奔跑&#xf…...

实验室搬砖实录:手把手教你搞定柱层析,从TLC监测到梯度洗脱的保姆级避坑指南

实验室搬砖实录&#xff1a;手把手教你搞定柱层析&#xff0c;从TLC监测到梯度洗脱的保姆级避坑指南 记得第一次独立做柱层析时&#xff0c;盯着那根玻璃柱看了半小时&#xff0c;愣是没敢动手。TLC板上明明分得挺开的点&#xff0c;怎么一上柱子就全乱了&#xff1f;洗脱液极性…...

EasyAnimateV5-7b-zh-InP一键部署教程:基于Linux系统的快速安装指南

EasyAnimateV5-7b-zh-InP一键部署教程&#xff1a;基于Linux系统的快速安装指南 1. 引言 想快速在Linux系统上部署一个强大的视频生成模型吗&#xff1f;EasyAnimateV5-7b-zh-InP是一个22GB的图生视频模型&#xff0c;支持多分辨率视频生成&#xff0c;还能用中英文双语进行预…...

文墨共鸣惊艳效果:古风UI下实时语义相似度计算与墨韵动画演示

文墨共鸣惊艳效果&#xff1a;古风UI下实时语义相似度计算与墨韵动画演示 1. 项目概览 文墨共鸣是一个将深度学习技术与传统水墨美学完美结合的系统。它基于先进的StructBERT模型&#xff0c;能够智能分析两段文字之间的语义相似度&#xff0c;并通过优雅的古风界面直观展示结…...

WebAgent :基于 MCP 协议打造的智能应用“超级路由器”

本文由云软件体验技术团队李锦浩原创。 在 NextSDK 介绍文章里&#xff0c;我们聊了怎么用 opentiny/next-sdk 给前端页面快速接入智能化能力——几行代码嵌进去&#xff0c;用户扫个二维码&#xff0c;手机上就能弹出一个 Remoter 对话窗口&#xff0c;直接用自然语言远程操控…...