Pygame程序的屏幕显示

不同对象的绘制与显示过程

在Pygame中,需要将所有需要在屏幕上显示的内容都绘制在一个display surface上。该Surface通常称为screen surface,它是pygame.display.set_mode()函数返回的Surface对象。

在绘制不同对象时,可以使用不同的绘制方法。下面介绍一些常用的绘制方法:

  • 绘制图像:

    • 使用pygame.image.load()函数加载图像文件,返回一个Surface对象。
    • 将需要绘制的图像blit到screen surface中,使用Surface.blit()方法进行绘制。
  • 绘制文本:

    • 使用pygame.font.Font()函数创建字体对象,该函数接受两个参数:字体文件的路径和字体大小。
    • 使用字体对象的render()方法将文本渲染成Surface对象。
    • 将渲染好的Surface对象blit到screen surface中。
  • 绘制几何图形:

    • 使用pygame.draw.rect()函数绘制矩形。
    • 使用pygame.draw.circle()函数绘制圆形。
    • 使用pygame.draw.line()函数绘制直线等。

Pygame中不同对象的显示过程

在Pygame中,不同对象的显示过程如下:

  1. 颜色填充:

    • 调用screen surface对象的fill()方法,可以将整个screen surface区域或部分screen surface区域填充为指定颜色。
  2. 简单图形:

    • 使用pygame.draw模块下的相关函数,例如pygame.draw.line()绘制直线、pygame.draw.rect()绘制矩形、pygame.draw.circle()绘制圆形等。
    • 将绘制函数的第一个参数指定为screen surface对象,以便将图形绘制在screen surface上。
  3. 图片图像:

    • 使用pygame.image.load()方法加载图片文件,返回一个image surface对象,表示图片的像素信息。
    • 调用screen surface对象的blit()方法,将image surface绘制到screen surface上。blit()方法的第一个参数是要绘制的image surface,第二个参数是一个坐标元组,表示绘制的位置。
  4. 文字:

    • 使用pygame.font.Font()函数创建字体对象,指定字体文件的路径和字体大小。
    • 使用字体对象的render()方法将文字渲染成一个text surface对象。
    • 调用screen surface对象的blit()方法,将text surface绘制到screen surface上。

在绘制完所有对象后,需要调用pygame.display.flip()或pygame.display.update()函数来更新屏幕显示。flip()函数会将screen surface的内容更新到屏幕上,并清除之前的内容。update()函数只会更新有变化的部分,可以提高程序的运行效率。

总之,在Pygame中,颜色填充只需调用fill()方法,简单图形使用相关绘制函数并指定screen surface为第一个参数,图片图像先加载为image surface再使用blit()方法绘制,文字先渲染为text surface再使用blit()方法绘制。最后需要调用flip()或update()函数更新屏幕显示。

在Pygame的画面中移动物体

在Pygame中,要移动物体,可以按照以下步骤进行操作:

  1. 在游戏循环中,使用pygame.Surface.fill()方法或其他绘制函数将物体绘制在屏幕上。
  2. 在每次循环中,更新物体的位置。可以通过改变物体的坐标来实现物体的移动。
  3. 在下一次循环开始之前,使用pygame.Surface.fill()方法或其他绘制函数将物体从原来的位置擦除。
  4. 使用pygame.Surface.blit()方法或其他绘制函数将物体绘制到新的位置上。

注意:

  • 注意对象的绘制顺序,后绘制的对象会把先绘制的对象覆盖住。
  • 注意及时清除屏幕,当在循环中不断绘制某个对象时,若是没有及时清除屏幕,则会导致“重影”现象,特别是在对象移动的情况下;因此在每次重绘时,最好清除屏幕内容,可以利用fill()方法把整个屏幕填充为相同颜色,也可重绘背景图片,具体方法取决于应用场景。
  • 注意记得调用pygame.display.flip()或者pygame.display.update()更新屏幕,否则屏幕上什么都不会显示。

具体示例:一个运动的小球 

import pygamepygame.init()# 设置窗口大小
size = [400, 300]
screen = pygame.display.set_mode(size)# 设置窗口标题
pygame.display.set_caption("Moving Ball")# 设置背景颜色
bg_color = (255, 255, 255)# 设置小球初始位置和速度
ball_pos = [50, 50]
ball_speed = [2, 2]# 游戏循环
done = False
while not done:# 处理事件for event in pygame.event.get():if event.type == pygame.QUIT:done = True# 清除屏幕screen.fill(bg_color)# 移动小球ball_pos[0] += ball_speed[0]ball_pos[1] += ball_speed[1]# 如果小球碰到边界,就反弹回来if ball_pos[0] < 0 or ball_pos[0] > size[0]:ball_speed[0] = -ball_speed[0]if ball_pos[1] < 0 or ball_pos[1] > size[1]:ball_speed[1] = -ball_speed[1]# 绘制小球pygame.draw.circle(screen, (255, 0, 0), ball_pos, 10)# 刷新屏幕pygame.display.flip()# 控制帧率pygame.time.Clock().tick(60)# 退出程序
pygame.quit()

在上面的代码中,首先初始化了Pygame库,创建一个窗口,并设置了窗口标题和背景颜色。

然后定义了小球的初始位置和速度,以及游戏循环中需要处理的事件。

在游戏循环中,首先清除屏幕,然后移动小球的位置,并处理小球碰到边界的情况,使其反弹回来。

接下来,通过pygame.draw.circle()函数绘制了一个红色的小球,

最后通过pygame.display.flip()刷新屏幕,让绘制的内容显示出来。

在每次循环结束后,调用pygame.time.Clock().tick(60)控制帧率,从而保证程序的运行速度不会过快或过慢。

通过上面的代码,实现了一个简单的运动小球,并且可以通过修改参数和添加功能,实现自己想要的效果。

 

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

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

相关文章

基于汽车胎压检测及温度预警

课题简介 汽车胎压监测系统可分为两种&#xff1a;一种是间接式胎压监测系统&#xff0c;是通过轮胎的转速差来判断轮胎是否异常&#xff1b;另一种是直接式胎压监测系统&#xff0c;通过在轮胎里面加装四个胎压监测传感器&#xff0c;在汽车静止或者行驶过程中对轮胎气压和温…

鸿蒙开发环境搭建-高频环境问题解决

1.Node版本问题 由于SDK的部分工具依赖Node.js运行时&#xff0c;推荐使用配套API版本的Node.js&#xff0c;保证工程的兼容性。 匹配关系见下表&#xff1a; API LevelNode.js支持范围API Level≤914.x&#xff08;≥14.19.1&#xff09;、16.xAPI Level>914.x&#xff0…

java JDBC 连接数据库(增删查改)

必须先插入工具包 代码 public static void main(String[] args) {DataSource ds JdbcHelper.getDs();System.out.println(ds);JdbcTemplate jdbcTemplatenew JdbcTemplate(ds);System.out.println(jdbcTemplate);//新增String sql1"insert into biao values(null,?,?,…

深入浅出理解SPP、ASPP、DSPP、MDSPP空间金字塔池化系列结构(综合版)

一、参考资料 目标检测&#xff1a;SPP-net SPP原理及实现 金字塔池化系列的理解SPP、ASPP SPP&#xff0c;PPM、ASPP和FPN结构理解和总结 二、空间金字塔池化(SPP) 原始论文&#xff1a;[1] 1. 引言 传统的卷积神经网络中&#xff0c;池化层通常采用固定的池化层级和固定…

7个向量数据库对比:Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant

本文简要总结了当今市场上正在积极开发的7个向量数据库&#xff0c;Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant 的详细比较。 我们已经接近在搜索引擎体验的基础层面上涉及机器学习&#xff1a;在多维多模态空间中编码对象。这与传统的关键字查找不同&#xff08…

python netCDF4

NetCDF简介 NetCDF 即 network Common Data Form&#xff08;网络通用数据格式&#xff09;&#xff0c;是一种面向数组型并适于网络共享的数据的描述和编码标准。文件的后缀是 .nc。nc 在气象领域应用很广&#xff0c;因为它可以存储不同波段的长时间观测结果。 NetCDF 文件…

STL——stack容器和queue容器详解

目录 &#x1f4a1;stack &#x1f4a1;基本概念 常用接口 &#x1f4a1;queue &#x1f4a1;基本概念 &#x1f4a1;常用接口 &#x1f4a1;stack &#x1f4a1;基本概念 栈&#xff08;stack&#xff09;&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端…

superset未授权访问漏洞(CVE-2023-27524)复现

Superset是一个开源的数据探索和可视化平台。它由Apache软件基金会支持&#xff0c;旨在帮助用户通过直观的方式探索、分析和可视化复杂的数据集。Superset支持多种数据源&#xff0c;包括关系型数据库、NoSQL数据库和各种其他数据存储系统。Apache Superset 2.0.1 版本及之前版…

软件测试当中的测试用例模板

测试用例这块知识、经验&#xff0c;小酋在前面陆续都讲完了。这章提供几种用例模板&#xff0c;作为这块知识的收尾。 - 1 - 测试用例&#xff08;主指功能测试用例模板&#xff09;的内容通常包括测试目标&#xff08;目的&#xff09;&#xff0c;需求标示&#xff08;一般…

ModuleNotFoundError: No module named ‘simple_knn‘

【报错】使用 AutoDL 复现 GaussianEditor 时引用 3D Gaussian Splatting 调用simple_knn 时遇到 ModuleNotFoundError: No module named ‘simple_knn‘ 报错&#xff1a; 【原因】 一开始以为是版本问题&#xff0c;于是将所有可能的版本都尝试了 (from versions: 0.1, 0.2…

【算法笔记】状态压缩dp(noip)

在acwing学习算法的一点思考和总结 状态压缩dp可以用来解决两种问题&#xff1a;一种是棋盘式的&#xff0c;也就是表示一行有2^N种摆法&#xff0c;另一种是表示一类集合 状压——棋盘式 思路&#xff1a;可以类比一下蒙德里安的梦想的解题过程&#xff0c;每一行的状态都只会…

Java面试题(java高级面试题)

线程池的核心线程数设置为多大比较合理&#xff1f; Worker线程在执行的过程中&#xff0c;有一部计算时间需要占用CPU&#xff0c;另一部分等待时间不需要占用CPU&#xff0c;通过量化分析&#xff0c;例如打日志进行统计&#xff0c;可以统计出整个Worker线程执行过程中这两…