详解pygame中Rect对象

 更新时间:2022年07月13日 15:32:41   作者:acktomas  
Rect是pygame中的一个创建矩形的对象,它包含一些属性主要是两块:坐标和长宽,Pygame?通过?Rect?对象存储和操作矩形区域,这篇文章主要介绍了pygame中Rect对象,需要的朋友可以参考下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

class pygame.Rect Rect

对象的属性:

Rect 表示的区域必须位于一个 Surface 对象之上,比如游戏的主窗口(screen)。上述方法由四个关键参数值构成,分别是 left、top、width、height,为了方便大家理解这些距离的含义,下面给出了一张示意图:

pygame Rect区域

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

1.返回一个坐标数字

x,y
top, left, bottom, right
centerx, centerysize
width, height
w,h;

2.返回一个(X,Y)坐标数组

topleft (左上)
bottomleft (左下)
bottomright (右下)
midtop(中上)
midleft(左中)
midbottom(底中)
midright(右中)
center(中心点坐标)

方法

Rect 是用于存储矩形坐标的 Pygame 对象。

Rect(left, top, width, height) -> Rect
Rect((left, top), (width, height)) -> Rect
Rect(object) -> Rect

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

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

方法说明返回值
pygame.Rect.copy()— 拷贝 Rect 对象,返回与原始矩形具有相同位置和大小的新矩形。Rect对象
pygame.Rect.move()— 移动 Rect 对象,返回按给定偏移量移动后的新矩形。x和y参数可以是任何整数值,正数或负数。Rect对象
pygame.Rect.move_ip()— 原地移动 Rect 对象,与 Rect.move() 方法相同,但仅操作无返回副本。None
pygame.Rect.inflate()— 放大和缩小 Rect 对象的尺寸,返回一个新矩形,其大小由给定的偏移量更改。矩形仍围绕其当前中心。负值将缩小矩形。Rect对象
pygame.Rect.inflate_ip()— 原地放大和缩小 Rect 对象的尺寸,与 Rect.inflate() 方法相同,但仅操作无返回副本。None
pygame.Rect.clamp()— 将一个 Rect 对象移动到另一个 Rect 对象的中心,返回一个新的矩形,该矩形被移动到参数Rect内。如果矩形太大而不能放在内部,它将在参数Rect内居中,但其大小不会更改。Rect对象
pygame.Rect.clamp_ip()— 原地将一个 Rect 对象移动到另一个 Rect 对象的中心None
pygame.Rect.clip()— 获取两个 Rect 对象互相重叠的部分,返回一个新矩形,该矩形被裁剪为完全位于参数矩形内。如果两个矩形开始时没有重叠,则返回一个0大小的矩形。Rect对象
pygame.Rect.union()— 将两个 Rect 对象合并,返回完全覆盖两个提供的矩形区域的新矩形。新矩形内可能有原始矩形未覆盖的区域。Rect对象
pygame.Rect.union_ip()— 原地将两个 Rect 对象合并,与 Rect.union() 方法相同,但仅操作无返回副本。None
pygame.Rect.unionall()— 将多个 Rect 对象合并Rect对象
pygame.Rect.unionall_ip()— 原地将多个 Rect 对象合并None
pygame.Rect.fit()— 按照一定的宽高比调整 Rect 对象,返回一个新矩形,该矩形被移动并调整大小以适应另一个矩形。保留原始矩形的纵横比,因此新矩形的宽度或高度可能小于目标矩形。Rect对象
pygame.Rect.normalize()— 翻转 Rect 对象(如果尺寸为负数),如果矩形的宽度或高度为负,则此操作将翻转矩形的宽度或高度。矩形将保持在同一位置,只交换边。None
pygame.Rect.contains()— 检测一个 Rect 对象是否完全包含在该 Rect 对象内,contains(Rect) -> bool当参数完全在Rect内时返回true。bool
pygame.Rect.collidepoint()— 检测一个点是否包含在该 Rect 对象内,如果给定点位于矩形内,则返回true。沿右边缘或下边缘的点不被视为位于矩形内。注意:对于矩形和直线之间的碰撞检测,可以使用 clipline() 方法。bool
pygame.Rect.colliderect()— 检测两个 Rect 对象是否重叠,如果矩形的任何部分重叠(除了顶部+底部或左侧+右侧边缘),则返回true。注意:对于矩形和直线之间的碰撞检测,可以使用 clipline() 方法。bool
pygame.Rect.collidelist()— 检测该 Rect 对象是否与列表中的任何一个矩形有交集,测试矩形是否与一系列矩形中的任何矩形碰撞。返回找到的第一个冲突的索引。如果未找到冲突,则返回索引-1。bool
pygame.Rect.collidelistall()— 检测该 Rect 对象与列表中的每个矩形是否有交集,返回包含与矩形冲突的矩形的所有索引的列表。如果未找到相交矩形,则返回空列表。bool
pygame.Rect.collidedict()— 检测该 Rect 对象是否与字典中的任何一个矩形有交集bool
pygame.Rect.collidedictall()— 检测该 Rect 对象与字典中的每个矩形是否有交集[(key, value), …]

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

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)
输出结果如下:
x的值是0;y的值是0
bottom的值是100;right的值是100
#设置中心努力
(50, 50) 50 50
(50, 0)
#midright
(100, 50)
#bottomleft
(0, 100)
#size
(100, 100)

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

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))。
示例:

import pygame
import sys
 
pygame.init()
 
size = width, height = 300, 300
 
bg = (255, 255, 255) # RGB 白色
 
# 创建指定大小的窗口 Surface
screen = pygame.display.set_mode(size)
# 设置窗口标题
pygame.display.set_caption("Python Demo")
 
clock = pygame.time.Clock()
 
rect1 = pygame.Rect(0, 0, 100, 50)
rect2 = pygame.Rect(50, 50, 200, 200)
 
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
 
    screen.fill(bg)
    
    pygame.draw.rect(screen, (255, 0, 0), rect1)
    pygame.draw.rect(screen, (0, 255, 0), rect2)
    pygame.draw.rect(screen, (0, 0, 255), rect1.fit(rect2))
    
    pygame.display.flip()
    
    clock.tick(10)

剪切图片的应用

1)加载图片shoot_img = pygame.image.load(r'F:\Python STUDY\images\me11.png')

2)矩形剪切图片

hero1_rect = pygame.Rect(0, 0, 136, 168)
hero2 = shoot1_img.subsurface(hero1_rect)

到此这篇关于详解pygame中Rect对象的文章就介绍到这了,更多相关pygame中Rect对象内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • 10行Python代码计算汽车数量的实现方法

    10行Python代码计算汽车数量的实现方法

    这篇文章主要介绍了10行Python代码计算汽车数量的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Django中使用Json返回数据的实现方法

    Django中使用Json返回数据的实现方法

    这篇文章主要介绍了Django中使用Json返回数据的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Python Tkinter GUI编程实现Frame切换

    Python Tkinter GUI编程实现Frame切换

    本文主要介绍了Python Tkinter GUI编程实现Frame切换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Python图像处理Pillow库的安装使用

    Python图像处理Pillow库的安装使用

    本文详细介绍了Python第三方库Pillow的使用,通过导入Pillow库、打开和保存图像、基本图像操作以及图像处理高级功能的代码示例,我们了解了Pillow库的强大功能和灵活性,感兴趣的朋友跟随小编一起看看吧
    2023-07-07
  • python自动化测试之连接几组测试包实例

    python自动化测试之连接几组测试包实例

    这篇文章主要介绍了python自动化测试之连接几组测试包实例,需要的朋友可以参考下
    2014-09-09
  • ansible作为python模块库使用的方法实例

    ansible作为python模块库使用的方法实例

    ansible是一个python package,是个完全的unpack and play软件,对客户端唯一的要求是有ssh有python,并且装了python-simplejson包,部署上简单到发指。下面这篇文章就给大家主要介绍了ansible作为python模块库使用的方法实例,需要的朋友可以参考借鉴。
    2017-01-01
  • Python pyecharts绘制柱状图

    Python pyecharts绘制柱状图

    这篇文章主要介绍了Python pyecharts绘制柱状图,文章介绍的柱状/条形图,通过柱形的高度/条形的宽度来表现数据的大小,感兴趣的小伙伴一起进入文章学习更详细内容吧
    2021-12-12
  • 用Python实现换行符转换的脚本的教程

    用Python实现换行符转换的脚本的教程

    这篇文章主要介绍了用Python实现换行符转换的脚本的教程,代码非常简单,包括一个对操作说明的功能的实现,需要的朋友可以参考下
    2015-04-04
  • python 循环结构练习题

    python 循环结构练习题

    这篇文章主要给大家分享的是python 循环结构练习题,求两个数最大公约数、整数反转:如12345,输出54321等多个练习题,需要的朋友可以参考一下
    2021-11-11
  • 解决pip安装的第三方包在PyCharm无法导入的问题

    解决pip安装的第三方包在PyCharm无法导入的问题

    这篇文章主要介绍了关于pip安装的第三方包在PyCharm无法导入的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10

最新评论

?


http://www.vxiaotou.com