【Python】【进阶篇】七、Pygame的Rect区域位置

目录

  • 七、Pygame的Rect区域位置

七、Pygame的Rect区域位置

Rect(rectangle)指的是矩形,或者长方形,在 Pygame 中我们使用 Rect() 方法来创建一个指定位置,大小的矩形区域。函数的语法格式如下:

rect =pygame.Rect(left,top,width,height) 

Rect 表示的区域必须位于一个 Surface 对象之上,比如游戏的主窗口(screen)。上述方法由四个关键参数值构成,分别是 left、top、width、height。

注意:在 Pygame 中以游戏主窗口的左上角为坐标原点。

下面看一组简单的使用示例,如下所示:

import pygame

pygame.init()
screen = pygame.display.set_mode((500, 300))
pygame.display.set_caption('python自学网')
image_surface = pygame.image.load("./python.png")
rect1 = pygame.Rect(50, 50, 100, 100)
# 在原图的基础上创建一个新的子图(surface对象)
image_child = image_surface.subsurface(rect1)
rect2 = image_child.get_rect()
# 输出的矩形大小为 100*100
print(rect2)
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()
    # 在屏幕上显示子图的区域
    screen.blit(image_child, rect1)
    pygame.display.update()

从上述运行结果可以看出,我们在图片上截取了一个和 rect1 同样大小的矩形区域(100*100)。

Rect(矩形区域)对象还提供了一些常用方法。如下表所示:

名称说明
pygame.Rect.copy()复制矩形
pygame.Rect.move()移动矩形区域,接受一个列表参数
pygame.Rect.move_ip()移动矩形(无返回)
pygame.Rect.inflate()增大或缩小矩形大小
pygame.Rect.clamp()将矩形移到另一个矩形内
pygame.Rect.union()返回一个两个矩形合并后的矩形。
pygame.Rect.fit()按纵横比调整矩形的大小或移动矩形。
pygame.Rect.contains()测试一个矩形是否在另一个矩形内
pygame.Rect.collidepoint() 测试点是否在矩形内
pygame.Rect.colliderect()测试两个矩形是否重叠

同时 Rect 对象也提供了一些关于矩形大小的常用的属性,如下所示:

x,y  表示矩形距离 x、y 轴的距离
top, left, bottom, right #在坐标系内描述矩形的大小
topleft, bottomleft, topright, bottomright #返回一个描述矩形大小的元组
midtop, midleft, midbottom, midright #返回一个描述矩形大小的元组
center, centerx, centery #(centerx,centery)表示矩形中央坐标(x,y)的值
size, width, height
w,h  #用于描述矩形的width、height

下面看一组简单的示例演示,如下所示:

import pygame

# 对应left/top/width/height
rect1 = pygame.Rect(0, 0, 100, 100)
print('x的值是{};y的值是{}'.format(rect1.x, rect1.y))
print('bottom的值是{};right的值是{}'.format(rect1.bottom, rect1.right))
# 设置居中的距离
print(rect1.center, rect1.centerx, rect1.centery)
# 返回值为 (centerx,top)
print(rect1.midtop)
# 返回值为 (right,centery)的元组
print(rect1.midright)
# 返回值为(left,bottom)
print(rect1.bottomleft)
# 返回矩形区域大小,元组格式
print(rect1.size)

我们还可以通过属性对来设置,或者者更改矩形区域的大小,如下所示:

rect1.left = 30 
rect1.center = (70,70)

除了通过 Rect 对象来构造一个矩形区域之外,我们还可以使用rect属性来构建一个矩形区域。在 Pygame 中有许多函数都提供了rect属性,比如有下列函数:

surface.fill((0,0,255),rect=(100,100,100,50))

上述代码会在 surface 对象的区域内选定一个 rect 区域,并将该区域填充为蓝色(RGB(0,0,255))。

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

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

相关文章

RabbitMQ中死信队列和延迟队列

目录一、死信队列1.过期时间代码实现2.长度限制代码实现3.测试消息拒收4.死信队列小结二、延迟队列1.代码实现1.1 生产者1.2 生产者一、死信队列 死信队列,英文缩写:DLX 。Dead Letter Exchange(死信交换机),当消息成…

ThreeJS-纹理(十)

关键代码: const textureLoader new THREE.TextureLoader(); //纹理加载器加载图片 const docColorLoader textureLoader.load(static/1.webp) // let color new THREE.Color(Math.random(), Math.random(), Math.random()); const cubeMaterial new THREE.Mesh…

基于单片机的定时温控系统的设计_kaic

摘 要 在集成电路技术越来越成熟的情况下单片机的发展也有了翻天覆地的变化。单片机制造初期,需要的成本十分高昂,并且制作工序也是相当的繁杂。但是伴随时间的推移,电子技术经过不断革新,才使今天的单片机性价比变得更高&#x…

Mac电脑优化软件清理软件CleanMyMac X最新版本号V4.12.5功能介绍

近些年伴随着苹果生态的蓬勃发展,越来越多的用户开始尝试接触Mac电脑。然而很多人上手MacBook后会发现,它的使用逻辑与Windows存在很多不同,而且随着使用时间的增加,一些奇奇怪怪的文件也会占据有限的磁盘空间,进而影响…

计算机网络 第一章 概述小结

计算机网络 第一章 概述 1.1 因特网概述 名词解释:因特网服务提供者ISP(Internet Service Provider) 1.2 三种交换方式 电路交换: 优点:通信时延小、有序传输、没有冲突、适用范围广、实时性强、控制简单&#x…

在大厂做了5年测试,3月被无情辞退,想给摸鱼的兄弟提个醒

先简单交代一下背景吧,某不知名 985 的本硕,17 年毕业加入字节,以“人员优化”的名义无情被裁员,之后跳槽到了有赞,一直从事软件测试的工作。之前没有实习经历,算是5年的工作经验吧。 这5年之间完成了一次…

CUDA编程(一):GPU计算与CUDA编程简介

CUDA编程(一):GPU计算与CUDA编程简介GPU计算GPU硬件资源GPU软件资源GPU存储资源CUDA编程GPU计算 NVIDIA公司发布的CUDA是建立在GPU上的一个通用并行计算平台和编程模型,CUDA编程可以利用GPU的并行计算引擎来更加高效地解决比较复…

52LeetCode刷题_LeetCode刷题手册

虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 LeetCode。 LeetCode收录…

工作7年了,从“功能测试”到了现在的“测试开发”,年薪35W+,分享下我的心得

前言 时光飞逝,转眼间从事软件测试已经是第7个年头了。从最开始的毛头小子到现在的独当一面经历了太多,也学习了太多知识,所幸最后结果是好的,目前在上海工作从事测试开发岗位,年薪35W,曾就职于美团测试开…

JVM 执行引擎

执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件…

基于JSP的学生奖学金评定管理系统的设计与实现_kaic

摘 要 随着信息时代的到来,计算机技术已经逐步融入到生活的各个领域,在教育行业中的应用也非常广泛,各种管理系统应运而生,能够为学生的学习和生活等方面提供更加周到和实用的服务。然而,由于学生人数众多&#xff0c…

vue尚品汇商城项目-day01【1.vue-cli脚手架初始化项目生成文件的介绍】

文章目录本人其他相关文章链接node_modules文件夹:项目依赖文件夹public文件夹:一般放置一些静态资源(图片),需要注意,放在public文件夹中的静态资源,在webpack打包时,会原封不动的打…

Linux Dbus

简介Linux Dbus是由freedestop.org项目开发的一款IPC进程间通讯技术,它是基于在Unix 域套接字 (unix domain sockets-UDS)实现的,它在sockets上面进行了封装并提供了一套更加规范、方便、安全的通讯机制,同时定义了一套标准接口,目…

鲲鹏DevKit原生开发,效率倍增使能极简开发

今天介绍的主要内容有:鲲鹏开发框架的工具能力和使用,鲲鹏开发框架插件工具,鲲鹏编译调试工的新特性和功能 1.整体介绍 鲲鹏在最初发展存在生态不丰富问题,随着鲲鹏的发展,越来越多的应用需要在鲲鹏上进行原生开发,使用鲲鹏的算力。 通过广泛…

windows C++环境安装

目录 手动装vsCodeCMake 什么是vcpkg 什么是scoop 针对scoop一直用不起来,这样处理下就可以了 openssl 安装 总结 参考资料 手动装vsCodeCMake https://blog.csdn.net/weixin_43470971/article/details/119621643 https://blog.csdn.net/jjxcsdn/articl…

图书馆管理系统(Java编写,思路及源代码)

如果你已经学习了Java的三大特性(封装、继承、多态)及接口,那么你就可以尝试这个编写这个图书馆管理系统小项目,这个小项目主要的作用还是用来巩固Java的三大特性及接口的学习。(我前边的几个博客中也详细介绍了三大特…

计算机网络第三章(数据链路层)【湖科大教书匠】

1. 概述 物理层发出去的信号需要通过数据链路层才知道是否到达目的地;才知道比特流的分界线 链路(Link):从一个结点到相邻结点的一段物理线路,中间没有任何其他交换结点数据链路(Data Link):把实现通信协议的硬件和软件加到链路…

Spring系列(六) --- SpringBoot 与 Servlet 的比较及 Spring 读取配置文件的方式

SpringSpringBoot VS ServletSpring 读取配置文件的方式yml 和 properties 的区别SpringBoot VS Servlet Spring 读取配置文件的方式 1 Value 注解获取单个配置项 如在 yml 中定义一个 qq 音乐的 token; 然后输出, 如下: 2 针对对象的读取: ConfigurationProperties 在 yml 中…

el-table实现自适应高度滚动,并处理fixed的问题

需求 页面只有一页,不能滚动。需要对长的table在内部设置滚动。 设置Scss .el-table自身拥有 flex:1 这项css规则。 需要先为table的父级容器设置display: flex; flex-direction: column; 这样el-table的高度就可以自适应剩余空间。 再在scss文件中添…

【美赛】2023年MCM问题Y:理解二手帆船价格(代码思路)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…
最新文章