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 pygame

pygame.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)控制帧率,从而保证程序的运行速度不会过快或过慢。

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

 

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

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

相关文章

Linux - No space left on device

问题描述 No space left on device 原因分析 说明在服务器设备上的存储空间已经满了&#xff0c;不能再上传或者新建文件夹或者文件等。 解决方案 确认查看服务器系统的磁盘使用情况是否是真的已经没有剩余空间&#xff0c;复制下面命令在服务器上运行&#xff0c;然后发现如果…

用友U8 BI数据可视化报表怎么做?秘籍在这!

首先要找到一款顺利对接用友U8的BI数据可视化分析工具&#xff0c;简称BI工具、BI软件。这款BI工具需符合以下要求&#xff1a; 1、能对接用友U8系统。 2、有专门根据用友系统特性量身打造的标准化BI方案&#xff0c;也就是有标准化的用友U8 BI方案。 3、数据可视化图表丰富…

有没有游泳可以戴的耳机?2024年高性价比游泳耳机推荐

科技的不断进步为我们的生活带来了更多的便利和乐趣&#xff0c;游泳耳机作为一种专门设计用于水中活动的耳机也在不断演进。在畅游的时候&#xff0c;能够携带一款高性价比的游泳耳机&#xff0c;不仅可以让您更好地享受音乐&#xff0c;还能为游泳时的独特体验增色不少。 因…

HarmonyOS——ArkUI状态管理

一、状态管理 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&#xff0c;用户构建了一个UI模型&#xff0c;其中应用的运行时的状态是参数。当参数改变时&#xff0c;UI作为返回结果&#xff0c;也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染&…

ES索引原理

ES在检索时底层使用的就是倒排索引&#xff0c;正向索引是通过key找value&#xff0c;反向索引则是通过value找key。 索引会分为两个区域&#xff1a;索引区和元数据区。数据是这样存储在里面的&#xff1a; 简单理解就是&#xff1a;当要录入一条数据时&#xff0c;首先会将完…

红黑树(RBTree)

目录​​​​​​​ 一、红黑树简介 二、红黑树的来源 三、什么是红黑树 四、红黑树的性质 五、红黑树的节点定义 六、红黑树的操作 6.1、红黑树的查找 6.2、红黑树的插入 七、红黑树的验证 八、红黑树和AVL树的比较 一、红黑树简介 红黑树是一种自平衡的二叉查找树…

C++内存管理机制(侯捷)笔记4(完结)

C内存管理机制&#xff08;侯捷&#xff09; 本文是学习笔记&#xff0c;仅供个人学习使用。如有侵权&#xff0c;请联系删除。 参考链接 Youtube: 侯捷-C内存管理机制 Github课程视频、PPT和源代码: https://github.com/ZachL1/Bilibili-plus 介绍 下面是第四讲和第五讲…

02. 坦克大战项目-准备工作和绘制坦克

02. 坦克大战项目-准备工作和绘制坦克 01. 准备工作 1. 首先我们要创建四个类 1. Tank类 介绍&#xff1a;Tank 类主要用来表示坦克的基本属性和行为 public class Tank {private int x;//坦克的横坐标private int y;//坦克的纵坐标public int getX() {return x;}public v…

HTML 链接 图片引入

文章目录 链接图片引入 链接 准备工作 新建一个名为link.html和suc.html suc.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><title>显示结果</title></head><body>注册成功...&l…

[AutoSar]基础部分 RTE 08 runnable mapping

目录 关键词平台说明一、runnable mapping的必要性二、runnable mapping 通用规则三、Task type四、可以不用mapping的runnbale 关键词 嵌入式、C语言、autosar、runnable 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (…

chat-plus部署指南

目录 1.下载代码 2.启动 3.测试 1.下载代码 cd /optwget https://github.com/yangjian102621/chatgpt-plus/archive/refs/tags/v3.2.4.1.tar.gz 2.启动 cd /opt/chatgpt-plus-3.2.4.1/deploydocker-compose up -d 3.测试 管理员地址xxx:8080/admin 账号密码admin/admin1…

【回顾2023,展望2024】砥砺前行

2023年总结 转眼间&#xff0c;迎来了新的一年2024年&#xff0c;回顾2023&#xff0c;对于我来说是一个充满平凡但又充实又幸运的一年。这一年经历了很多的事情&#xff0c;包括博客创作、技术学习、出书、买房等&#xff0c;基本上每件事情都是一个前所未有的挑战和机遇、使…

Java 设计模式

1.单例设计模式 对某个类只能存在一个对象实例&#xff0c;并且该类只提供一个取得其对象实例的方法。 1.1 饿汉式 构造器私有化 --> 防止直接new类的内部创建对象提供一个static的public方法 getInstance class GirlFriend {private String name;private static GirlFri…

共融共生:智慧城市与智慧乡村的协调发展之路

随着科技的飞速发展和全球化的不断深入&#xff0c;智慧城市和智慧乡村作为现代社会发展的重要组成部分&#xff0c;正逐渐成为人们关注的焦点。然而&#xff0c;在追求经济发展的过程中&#xff0c;城乡发展不平衡的问题也日益凸显。因此&#xff0c;如何实现智慧城市与智慧乡…

HTTP 常见协议:选择正确的协议,提升用户体验(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

MES系统中的设备管理及设备数据采集

随时工厂数字化建设的大力推进&#xff0c;设备管理的效率得到了很大的提升&#xff0c;特别是作为机加工企业&#xff0c;设备是整个企业非常重要的核心资产。 一、设备进行数据采集面临痛点&#xff1a; 设备数据状况无法获取与掌握 设备老旧&#xff0c;信息化基础差&…

【Unity】Attribute meta-data#com.google.android.play.billingclient.version 多版本库冲突

文章目录 一、背景二、问题描述三、解决方案 一、背景 1、Unity 2021.3.9f1 2、Max由6.0.1至最新版本6.1.0 二、问题描述 错误信息 Attribute meta-data#com.google.android.play.billingclient.versionvalue value(6.1.0) from [com.android.billingclient:billing:6.1.0] An…

docker搭建部署minio 存储文件

1. 介绍 MinIO是一个开源的对象存储服务器&#xff0c;它允许你在自己的硬件上构建高性能的对象存储。本文将指导你如何使用Docker搭建和部署MinIO&#xff0c;并挂载外部目录以实现文件的持久化存储。 2. 安装Docker 首先&#xff0c;确保你的系统上已经安装了Docker。你可…

搞定 Postman 接口自动化测试,看这篇文章就够了!

postman 本文适合已经掌握Postman基本用法的读者&#xff0c;即对接口相关概念有一定了解、已经会使用Postman进行模拟请求等基本操作。 工作环境与版本&#xff1a; Window 7&#xff08;64位&#xff09; Postman &#xff08;Chrome App v5.5.3&#xff09; P.S. 不同版…

添加 常用校验方法,校验常见数据格式

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 基于 Valid…