详解pygame中Rect对象
作者:acktomas 发布时间:2021-01-09 04:37:58
标签:pygame,Rect,对象
class pygame.Rect Rect
对象的属性:
Rect 表示的区域必须位于一个 Surface
对象之上,比如游戏的主窗口(screen
)。上述方法由四个关键参数值构成,分别是 left、top、width、height
,为了方便大家理解这些距离的含义,下面给出了一张示意图:
注意:在 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)
来源:https://blog.csdn.net/acktomas/article/details/125745705


猜你喜欢
- >>什么是RPCRPC 的全称是 Remote Procedure Call 是一种进程间通信方式。它允许程序调用另一个地址空间
- 这篇文章主要介绍了Python OrderedDict的使用案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 一、数字类型。数字类型按照我的分类方法分为三类:整数类、小数类和数字类。 我所谓的“数字类”,就是指DECIMAL和NUMERIC,它们是同
- 最近学习javascript,碰到caller和callee的问题,去网上百度了很多。搜到的内容大同小益,整理总结了一下与大家分享。call
- 本文实例为大家了Python中列表(List)的详解操作方法,供大家参考,具体内容如下1.创建列表。只要把逗号分隔的不同的数据项使用方括号括
- 1、对继承的理解继承(Inheritance) :代码复用的高级抽象继承是面向对象设计的精髓之一实现了以类为单位的高级抽象级别代码复用继承是
- 下面给大家介绍Java正则表达式验证固定电话号码符合性,具体代码如下所示:/** * 验证固定电话号码的合法性 * @author jy *
- 本文实例讲述了Bootstrap简单实用的表单验证插件BootstrapValidator用法。分享给大家供大家参考,具体如下:Bootst
- Cookie 对象是一种以文件(Cookie文件)的形式保存在客户端硬盘的Cookies文件夹中的数据信息(Cookie数据)。Cookie
- 方法一 :使用常规的思路def transpose(M): # 初始化转置后的矩阵 result = [] &nbs
- 在大家的日常python程序的编写过程中,都会有自己解决某个问题的解决办法,或者是在程序的调试过程中,用来帮助调试的程序公式。小编通过上万行
- 概述TensorFlow2 的基本操作和 Numpy 的操作很像. 今天带大家来看一看 TensorFlow 的基本数据操作.创建数据详细讲
- 1. 下载2. 解压缩3. 添加path环境变量,路径指向mysql所在bin目录下4. 在主目录下创建data文件夹5. 注册window
- 最近网站访问量大增,可能有些频道程序也有一些问题,造成了MySQL数据库出现Forcing close of thread 28790 us
- Vue中有两个较为高级的静态方法mixin和extend,接下来我们来讨论下关于他们各自的原理和使用场景。Mixin:原理:先来看看官网的介
- 1.在浏览器搜索python.org,如下图选择第一个2.进入python官网,选择dowload然后选择windows如下图:3.选择py
- 本文实例讲述了Python使用re模块正则提取字符串中括号内的内容操作。分享给大家供大家参考,具体如下:直接上代码吧:# -*- codin
- 一、出现原因:readline模块没有安装二、解决方式:# 安装readline模块yum -y install readline-deve
- 前言说到如何用Python执行线性回归,大部分人会立刻想到用sklearn的linear_model,但事实是,Python至少有8种执行线
- 本文实例讲述了python写入xml文件的方法。分享给大家供大家参考。具体分析如下:本范例通过xml模块对xml文件进行写入操作from x