(1条消息) Pygame详解(十一):Rect 对象

class pygame.Rect

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

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

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

Rect(object) -> Rect

属性 & 方法

  • pygame.Rect.copy()  —  拷贝 Rect 对象
  • pygame.Rect.move()  —  移动 Rect 对象
  • pygame.Rect.move_ip()  —  原地移动 Rect 对象
  • pygame.Rect.inflate()  —  放大和缩小 Rect 对象的尺寸
  • pygame.Rect.inflate_ip()  —  原地放大和缩小 Rect 对象的尺寸
  • pygame.Rect.clamp()  —  将一个 Rect 对象移动到另一个 Rect 对象的中心
  • pygame.Rect.clamp_ip()  —  原地将一个 Rect 对象移动到另一个 Rect 对象的中心
  • pygame.Rect.clip()  —  获取两个 Rect 对象互相重叠的部分
  • pygame.Rect.union()  —  将两个 Rect 对象合并
  • pygame.Rect.union_ip()  —  原地将两个 Rect 对象合并
  • pygame.Rect.unionall()  —  将多个 Rect 对象合并
  • pygame.Rect.unionall_ip()  —  原地将多个 Rect 对象合并
  • pygame.Rect.fit()  —  按照一定的宽高比调整 Rect 对象
  • pygame.Rect.normalize()  —  翻转 Rect 对象(如果尺寸为负数)
  • pygame.Rect.contains()  —  检测一个 Rect 对象是否完全包含在该 Rect 对象内
  • pygame.Rect.collidepoint()  —  检测一个点是否包含在该 Rect 对象内
  • pygame.Rect.colliderect()  —  检测两个 Rect 对象是否重叠
  • pygame.Rect.collidelist()  —  检测该 Rect 对象是否与列表中的任何一个矩形有交集
  • pygame.Rect.collidelistall()  —  检测该 Rect 对象与列表中的每个矩形是否有交集
  • pygame.Rect.collidedict()  —  检测该 Rect 对象是否与字典中的任何一个矩形有交集
  • pygame.Rect.collidedictall()  —  检测该 Rect 对象与字典中的每个矩形是否有交集

Pygame 通过 Rect 对象存储和操作矩形区域。一个 Rect 对象可以由 left,top,width,height 几个值创建。Rect 也可以是由 Pygame 的对象所创建,它们拥有一个属性叫“rect”。

任何需要一个 Rect 对象作为参数的 Pygame 函数都可以使用以上值构造一个 Rect。这样使得作为参数传递的同时创建 Rect 成为可能。

Rect 对象中的大部分方法在修改矩形的位置、尺寸后会返回一个新的 Rect 拷贝,原始的 Rect 对象不会有任何改变。但有些方法比较特殊,它们会“原地”修改 Rect 对象(也就是说它们会改动原始的 Rect 对象),这些方法都会以 "ip" 作为后缀(小甲鱼温馨提示:"ip" 即 "in-place" 的缩写,“原地”的意思)。

对了方便大家移动和对齐,Rect 对象提供以下这些虚拟属性:

x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h

上边这些属性均可以被赋值,例如:

  1. rect1.right = 10
  2. rect2.center = (20,30)

给 size,width,height 属性赋值将改变矩形的尺寸;给其它属性赋值将移动矩形。注意:一些属性是整数,一些是整数对。

如果一个 Rect 对象的 width 或 height 非 0,那么将在非 0 测试中返回 True。一些方法返回尺寸为 0 的 Rect 对象,用于表示一个非法的矩形。

Rect 对象的坐标都是整数,size 的值可以是负数,但在大多数情况下被认为是非法的。

还有一些方法可以实现矩形间碰撞检测,大多数 Python 的容器可以用于检索其中的元素与某个 Rect 对象是否碰撞。

Rect 对象覆盖的范围并不包含 right 和 bottom 指定的边缘位置。

温馨提示,一图胜千言:

这样的话,如果一个 Rect 对象的 bottom 边框恰好是另一个 Rect 对象的 top 边框(即 rect1.bottom == rect2.top),那么两矩形就恰好没有重叠的显示在屏幕上,rect1.colliderect(rect2) 也将返回 False。

尽管 Rect 对象可以被继承,但 Rect 的方法返回的是一个全新的 Rect 对象,而不是其子对象。

属性 & 方法详解

copy()

拷贝 Rect 对象。

copy() -> Rect

返回一个新的 Rect 对象,拥有与该 Rect 对象相同的位置和尺寸。

Pygame 1.9 新增加的。

move()

移动 Rect 对象。

move(x, y) -> Rect

返回一个新的 Rect 对象。x 和 y 参数可以是正数或负数,用于指定新对象的偏移地址。

move_ip()

原地移动 Rect 对象。

move_ip(x, y) -> None

效果跟 move() 方法一样,区别是这个直接作用于当前 Rect 对象,而不是返回一个新的。

inflate()

放大和缩小 Rect 对象的尺寸。

inflate(x, y) -> Rect

返回一个新的 Rect 对象。x 和 y 参数指定新的对象放大或缩小多少像素。新的对象保持与原始 Rect 对象在同一个中心上。

inflate_ip()

原地放大和缩小 Rect 对象的尺寸。

inflate_ip(x, y) -> None

效果跟 inflate() 方法一样,区别是这个直接作用于当前 Rect 对象,而不是返回一个新的。

clamp()

将一个 Rect 对象移动到另一个 Rect 对象的中心。

clamp(Rect) -> Rect

返回一个新的 Rect 对象,范围是以 Rect 参数指定的对象为中心,保持原始 Rect 对象的尺寸不变。如果原始 Rect 对象的尺寸比 Rect 参数的要大,那么保持中心重叠,尺寸不变。

clamp_ip()

原地将一个 Rect 对象移动到另一个 Rect 对象的中心。

clamp_ip(Rect) -> None

效果跟 clamp() 方法一样,区别是这个直接作用于当前 Rect 对象,而不是返回一个新的。

clip()

获取两个 Rect 对象互相重叠的部分。

clip(Rect) -> Rect

返回一个新的 Rect 对象,范围是原始 Rect 对象与 Rect 参数指定的对象互相重叠的部分。如果两个 Rect 对象没有任何重叠,则返回一个 (0, 0, 0, 0) 的 Rect 对象。

union()

将两个 Rect 对象合并。

union(Rect) -> Rect

返回一个新的 Rect 对象,范围将包含原始 Rect 对象与 Rect 参数指定的对象。由于结果返回一个新的矩形,所以会产生一些多与的空间。

union_ip()

原地将两个 Rect 对象合并。

union_ip(Rect) -> None

效果跟 union() 方法一样,区别是这个直接作用于当前 Rect 对象,而不是返回一个新的。

unionall()

将多个 Rect 对象合并。

unionall(Rect_sequence) -> Rect

返回一个新的 Rect 对象,范围将包含 Rect_sequence 参数指定的序列中所有的 Rect 对象。

unionall_ip()

原地将多个 Rect 对象合并。

unionall_ip(Rect_sequence) -> None

效果跟 unionall() 方法一样,区别是这个直接作用于当前 Rect 对象,而不是返回一个新的。

fit()

按照一定的宽高比调整 Rect 对象。

fit(Rect) -> Rect

返回一个新的 Rect 对象,范围是 Rect 参数的对象按照原始 Rect 对象的宽高比调整得来。

举个例子:

  1. import pygame
  2. import sys
  3. pygame.init()
  4. size = width, height = 300, 300
  5. bg = (255, 255, 255) # RGB 白色
  6. # 创建指定大小的窗口 Surface
  7. screen = pygame.display.set_mode(size)
  8. # 设置窗口标题
  9. pygame.display.set_caption("Python Demo")
  10. clock = pygame.time.Clock()
  11. rect1 = pygame.Rect(0, 0, 100, 50)
  12. rect2 = pygame.Rect(50, 50, 200, 200)
  13. while True:
  14. for event in pygame.event.get():
  15. if event.type == pygame.QUIT:
  16. pygame.quit()
  17. sys.exit()
  18. screen.fill(bg)
  19. pygame.draw.rect(screen, (255, 0, 0), rect1)
  20. pygame.draw.rect(screen, (0, 255, 0), rect2)
  21. pygame.draw.rect(screen, (0, 0, 255), rect1.fit(rect2))
  22. pygame.display.flip()
  23. clock.tick(10)

结果如下:

normalize()

翻转 Rect 对象(如果尺寸为负数)。

normalize() -> None

如果 width 或 height 存在负数,则做出相应的翻转,使其变为正数。翻转后的 Rect 仍然在原来的位置,只是修改其相应的属性值。

contains()

检测一个 Rect 对象是否完全包含在该 Rect 对象内。

contains(Rect) -> bool

如果 Rect 参数指定的对象完全包含在该 Rect 对象内,返回 True,否则返回 False。

collidepoint()

检测一个点是否包含在该 Rect 对象内。

collidepoint(x, y) -> bool

collidepoint((x,y)) -> bool

如果给定的点在该 Rect 对象内,返回 True,否则返回 False。

一个点在 Rect 的 right 或 bottom 边缘上时,并不被认为包含在该矩形内。

colliderect()

检测两个 Rect 对象是否重叠。

colliderect(Rect) -> bool

如果两个 Rect 对象有任何重叠的地方,返回 True,否则返回 False。

注意:right 和 bottom 指定的边缘位置并不属于对应的矩形。

collidelist()

检测该 Rect 对象是否与列表中的任何一个矩形有交集。

collidelist(list) -> index

返回值是第 1 个有相交的矩形所在列表中的索引号(如果有的话),否则返回 -1。

collidelistall()

检测该 Rect 对象与列表中的每个矩形是否有交集。

collidelistall(list) -> indices

返回一个列表,包含所有与该 Rect 对象有交集的元素;如果一个都没有,返回一个空列表。

collidedict()

检测该 Rect 对象是否与字典中的任何一个矩形有交集。

collidedict(dict) -> (key, value)

返回值是第 1 个有相交的矩形所在字典中的键和值;如果没有找到,返回 None。

注意:因为 Rect 对象不是哈希值,所以不能作为字典的键存在,因此比较的只有值。

collidedictall()

检测该 Rect 对象与字典中的每个矩形是否有交集。

collidedictall(dict) -> [(key, value), ...]

返回一个列表,包含所有与该 Rect 对象有交集的键值对;如果一个都没有,返回一个空字典。

注意:因为 Rect 对象不是哈希值,所以不能作为字典的键存在,因此比较的只有值。

(0)

相关推荐

  • 带薪玩一周游戏,还要涨工资

    来源:Python 技术「ID: pythonall」 带薪玩游戏,是多么开心的事情,我就找到了. 前段时间,公司接到一个模拟业务场景的项目,需要在图形界面上模拟业务场景,比如人跑动,拖拽物体等,从而 ...

  • 每一个用到canvas的小伙伴都应该了解的fabric.js

    导语 我们想在画布上画个基本的简单形状的时候,使用 Canvas 不会觉得有什么繁琐.但当画布上需要任何形式的互动,绘制复杂的图形和在特定情况需要改变图片的时候,使用原生 canvas API 将会变 ...

  • 用pygame开发自己的游戏-1. 基础与入门

    一.前言 pygame是一个用Python写的SDL库.SDL是一个能访问计算机多媒体硬件组件(包括声卡,视频卡,输入组件等)的跨平台库.本系列主要通过pygame做小游戏来学习编程.对于学过基本语法 ...

  • RECT类

    RECT类 rect对象用来存储一个矩形框的左上角坐标.宽度和高度. 描述矩形的宽度.高度和原点. 命名空间:  System.Windows 程序集:  System.Windows(在 Syste ...

  • 用Python写一个植物大战僵尸!简直一模一样

    引入需要的模块 import pygameimport random 配置图片地址 IMAGE_PATH = 'imgs/' 设置页面宽高 scrrr_width = 800scrrr_height ...

  • KineticJS教程

    作者:ysm @ iysm.net邮箱:cleverysm@gmail.com注:参考 http://www.html5canvastutorials.com/kineticjs/html5-canv ...

  • (3条消息) busybox详解

    (3条消息) busybox详解

  • (13条消息) 有限状态机详解(转载)

    以前总觉得有限状态机和无限状态机非常的难理解,原来也就是自己一直没有一个直观的认识,今天看到一篇博客,总算对有限状态机入门了.一看就懂. 转载地址:http://blog.csdn.net/zqixi ...

  • 早读|髌股关节骨关节炎诊疗指南(2020版),12条推荐意见详解!

    <中华医学信息导报>2020年18期第15版 膝关节骨关节炎是中老年人最常见的运动系统退行性疾病,根据病变部位不同分为单纯胫股关节骨关节炎(tibiofemoral osteoarthri ...

  • 最高法院关于公司清算的41条裁判规则详解

    公司清算,是指公司自愿解散或者被强制解散后,依据<公司法>的规定成立专门机构清理公司债权债务并处分公司剩余财产,最终通过公司登记机关注销公司法人人格的程序.公司清算作为市场主体出清的制度设 ...

  • 关于公司清算的41条裁判规则详解

    昨天 关于公司清算的41条裁判规则详解00:0001:20:38 音频支持倍速播放 来源 | 法义君 建议阅读时间: 49 分钟  公司清算,是指公司自愿解散或者被强制解散后,依据<公司法> ...

  • 普 法丨关于公司清算的41条裁判规则详解

    公司清算,是指公司自愿解散或者被强制解散后,依据<公司法>的规定成立专门机构清理公司债权债务并处分公司剩余财产,最终通过公司登记机关注销公司法人人格的程序.公司清算作为市场主体出清的制度设 ...

  • 高人辨证法:病机辨证十三条!(详解)

    本文拟从风病善变.寒多阴伏.火热急速(温暑同类).湿性缠绵.燥胜伤津.痰病多怪.水饮同源,瘀有多歧.郁病多杂.虚病多久.毒多难痼.疫为戾气.多因复合等十三个方面对周老审证求机辨治内科急难病症的临证经验 ...

  • 钓鱼漂语:16条漂相详解,知道10条就是老司机……

    判读漂讯是钓鱼中一项非常重要的基本功,只有正确掌握才能第一时间捕捉到鱼漂所传达给我们的讯息.关于漂讯,大致分为以下五种: 其一,浮.即所钓目数往上升浮: 其二,沉.即所钓目数往下沉: 其三,摆.即往两 ...

  • (4条消息) OpenCV DNN之YOLO实时对象检测

    OpenCV在3.3.1的版本中开始正式支持Darknet网络框架并且支持YOLO1与YOLO2以及YOLO Tiny网络模型的导入与使用.YOLO是一种比SSD还要快的对象检测网络模型,算法作者在其 ...