[TOC]
# **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
上邊這些屬性均可以被賦值,例如:
~~~
rect1.right = 10rect2.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 對象的寬高比調整得來。
舉個例子:
~~~
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)
~~~
結果如下:

### **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 對象不是哈希值,所以不能作為字典的鍵存在,因此比較的只有值。
- 一、Python基礎
- 1. 序言
- 1.1 Python簡介
- 1.2 安裝和使用IDE
- 1.3 語言特性和基礎概念
- 2. 基本數據類型
- 2.2 字符串型
- 2.2.2 ASCII簡介
- 2.2.4 字符串常用函數
- 3. 條件分支
- 3.3 閑聊條件判斷和運算符優先級
- 10.正則表達式
- 【降龍十八章】Python小技巧
- 18.1 學習網址
- 18.2 PIP切換源
- 18.3 使用whl來安裝
- 【工具優化】IDE優化技巧
- Anaconda
- Jupyter Notebook 的 Markdown 添加大綱
- Jupyter Notebook中圖片縮放和居左
- Anaconda設置環境變量
- Pycharm
- PyCharm新建文檔配置
- 設置字體和字號
- 設置主題和字體配色
- 保存和導入配置
- 設置對選擇內容自動添加引號
- 推薦安裝的插件
- Markdown
- 表格格式
- 二、Python進階
- copy和deepcopy
- 《零基礎入門學習 Python 》【小甲魚版】
- 001.和Python的第一次接觸+習題復習
- 002.用Python設計的第一個游戲 +習題復習
- Pygame詳解
- Pygame詳解:前言
- Pygame詳解(一):Color類
- Pygame詳解(二):display 模塊
- Pygame詳解(三):draw 模塊
- Pygame詳解(四):event 模塊
- Pygame詳解(五):font 模塊
- Pygame詳解(六):image 模塊
- Pygame詳解(七):key 模塊
- Pygame詳解(八):locals 模塊
- Pygame詳解(九):mixer 模塊
- Pygame詳解(十):mouse 模塊
- Pygame詳解(十一):Rect 對象
- Pygame詳解(十二):Surface 對象
- Pygame詳解(十三):time 模塊
- Pygame詳解(十四):music 模塊
- Pygame詳解(十五):pygame 模塊
- Pygame詳解(十六):cursors 模塊
- Pygame詳解(十七):joystick 模塊
- Pygame詳解(十八):mask 模塊
- Pygame詳解(二十一):BufferProxy 對象
- Pygame詳解(二十三):gfxdraw 模塊
- Pygame詳解(二十五):Overlay 對象
- Pygame詳解(二十八):sndarray 模塊
- Pygame詳解(三十一):camera 模塊
- Pygame詳解(三十二):cdrom 模塊
- Pygame詳解(三十六):version 模塊
- pygame rect相關知識
- Tkinter詳解
- Tkinter 組件詳解(一):Label
- Tkinter 組件詳解(二):Button