[TOC]
# **pygame.mask**
Pygame 中處理圖形遮罩的模塊。
## **函數**
* pygame.mask.from\_surface() —— 從指定 Surface 對象中返回一個 Mask
* pygame.mask.from\_threshold() —— 從給定閾值的 Surface 對象中創建一個 Mask
## **類**
* pygame.mask.Mask —— 用于表示 2d 位掩碼(遮罩)的 Pygame 對象
用于快速實現完美的碰撞檢測,Mask 可以精確到 1 個像素級別的判斷。
Pygame 1.8 新增加的。
## **函數詳解**
### **pygame.mask.from\_surface()**
從指定 Surface 對象中返回一個 Mask。
from\_surface(Surface, threshold = 127) -> Mask
Surface 對象中透明的部分設置為 1,不透明部分設置為 0。
檢查每個像素的 alpha 值是否大于 threshold 參數指定的值。(alpha 通道使用 0 ~ 255 描述像素的透明度)
如果 Surface 對象是基于 colorkeys 實現的透明(而不是基于 pixel alphas),則忽略 threshold 參數。
注:關于 Surface 對象的透明實現,可參考:Pygame詳解(十二):Surface 對象
### **pygame.mask.from\_threshold()**
從給定閾值的 Surface 對象中創建一個 Mask。
from\_threshold(Surface, color, threshold = (0,0,0,255), othersurface = None, palette\_colors = 1) -> Mask
從 Surface 對象中獲取 Mask,這個方法更有特色。如果只提供一個 Surface 對象,那么 Surface 對象中所有與 threshold 參數提供顏色匹配的像素均被選入 Mask 中。如果指定了 othersurface 可選參數,那么被選入 Mask 中的像素不僅需要與 threshold 參數提供顏色匹配,還需要包含在 othersurface 指定的 Surface 對象中。
### **class pygame.mask.Mask**
用于表示 2d 位掩碼(遮罩)的 Pygame 對象。
Mask((width, height)) -> Mask
## **方法**
* pygame.mask.Mask.get\_size() —— 返回 Mask 的大小
* pygame.mask.Mask.get\_at() —— 如果像素 (x, y) 被設置,返回值是非 0
* pygame.mask.Mask.set\_at() —— 設置 Mask 中給定位置的值
* pygame.mask.Mask.overlap() —— 返回兩個 Mask 在指定偏移處的重疊坐標(如果沒有返回 None)
* pygame.mask.Mask.overlap\_area() —— 返回兩個 Mask 重疊的像素數量
* pygame.mask.Mask.overlap\_mask() —— 將兩個 Mask 重疊的部分創建一個新的 Mask
* pygame.mask.Mask.fill() —— 將所有的位設置為 1
* pygame.mask.Mask.clear() —— 將所有的位設置為 0
* pygame.mask.Mask.invert() —— 翻轉 Mask 中所有的位(0 變 1,1 變 0)
* pygame.mask.Mask.scale() —— 縮放 Mask 的尺寸
* pygame.mask.Mask.draw() —— 將 Mask 繪制到另一個 Mask 上邊
* pygame.mask.Mask.erase() —— 用另一個 Mask 擦除 Mask
* pygame.mask.Mask.count() —— 返回 Mask 被設置(為 1)的像素的數量
* pygame.mask.Mask.centroid() —— 返回 Mask 的重心點
* pygame.mask.Mask.angle() —— 返回像素的方向
* pygame.mask.Mask.outline() —— 用列表的形式返回組成對象輪廓的點
* pygame.mask.Mask.convolve() —— 返回其它 Mask 的卷積
* pygame.mask.Mask.connected\_component() —— 返回與某像素區域的連接的 Mask
* pygame.mask.Mask.connected\_components() —— 返回一組連接某像素區域的 Mask 的列表
* pygame.mask.Mask.get\_bounding\_rects() —— 返回一組像素邊界矩形的列表
## **方法詳解**
### **pygame.mask.Mask.get\_size()**
返回 Mask 的大小。
get\_size() -> width,height
### **pygame.mask.Mask.get\_at()**
如果像素 (x, y) 被設置,返回值是非 0。
get\_at((x,y)) -> int
跟 Surface 對象一樣,(0, 0) 表示左上角坐標。
### **pygame.mask.Mask.set\_at()**
設置 Mask 中給定位置的值。
set\_at((x,y),value) -> None
### **pygame.mask.Mask.overlap()**
返回兩個 Mask 在指定偏移處的重疊坐標(如果沒有返回 None)。
overlap(othermask, offset) -> x,y
重疊檢測的偏移原理如下(偏移可以為負數):
~~~
+----+----------..
|A | yoffset
| +-+----------..
+--|B
|xoffset
| |
: :
~~~
### **pygame.mask.Mask.overlap\_area()**
返回兩個 Mask 重疊的像素數量。
overlap\_area(othermask, offset) -> numpixels
返回兩個 Mask 重疊的像素數量,這可以用于查看在某方向上發生碰撞的部分,或者查看兩個 Mask 有多少部分發生碰撞。相似的碰撞一般會通過計算重疊部分的梯度差分被發現。
~~~
dx = Mask.overlap_area(othermask,(x+1,y)) - Mask.overlap_area(othermask,(x-1,y))
dy = Mask.overlap_area(othermask,(x,y+1)) - Mask.overlap_area(othermask,(x,y-1))
~~~
### **pygame.mask.Mask.overlap\_mask()**
將兩個 Mask 重疊的部分創建一個新的 Mask。
overlap\_mask(othermask, offset) -> Mask
返回的 Mask 尺寸是原始 Mask 和 othermask 參數指定的 Mask 重疊部分。
### **pygame.mask.Mask.fill()**
將所有的位設置為 1。
fill() -> None
將 Mask 中所有的位設置為 1。
### **pygame.mask.Mask.clear()**
將所有的位設置為 0。
clear() -> None
將 Mask 中所有的位設置為 0。
### **pygame.mask.Mask.invert()**
翻轉 Mask 中所有的位(0 變 1,1 變 0)。
invert() -> None
翻轉 Mask 中所有的位(0 變 1,1 變 0)。
### **pygame.mask.Mask.scale()**
縮放 Mask 的尺寸。
scale((x, y)) -> Mask
Mask 根據指定尺寸縮放后返回一個新的 Mask。
### **pygame.mask.Mask.draw**
將 Mask 繪制到另一個 Mask 上邊。
draw(othermask, offset) -> None
將 Mask 繪制到另一個 Mask 上邊,執行的是按位 or 操作。
### **pygame.mask.Mask.erase()**
用另一個 Mask 擦除 Mask。
erase(othermask, offset) -> None
從 Mask 上擦除 othermask 指定的像素。
### **pygame.mask.Mask.count()**
返回 Mask 被設置(為 1)的像素的數量。
count() -> pixels
返回 Mask 被設置(為 1)的像素的數量。
### **pygame.mask.Mask.centroid()**
返回 Mask 的重心點。
centroid() -> (x, y)
找到 Mask 的重心點。如果 Mask 是空的,那么返回值是 (0, 0)。
### **pygame.mask.Mask.angle()**
返回像素的方向。
angle() -> theta
找到圖像中像素的大致方向(-90 度 ~ 90 度),這對于實現像素對接很有用。如果 Mask 是空的,那么返回值是 0.0。
### p**ygame.mask.Mask.outline()**
用列表的形式返回組成對象輪廓的點。
outline(every = 1) -> \[(x,y), (x,y) …\]
返回值是一個由點組成的列表,用于描繪穿過 Mask 的第一個對象的輪廓線。
every 可選參數用于設置點的跨度,默認是每 1 個像素。
### **pygame.mask.Mask.convolve()**
返回其它 Mask 的卷積。
convolve(othermask, outputmask=None, offset=(0,0)) -> Mask
返回一個由位組 (i-offset\[0\], j-offset\[1\]) 組成的 Mask,如果轉換的 othermask 參數在右下角 (i, j) 處,那么會與自身重疊。
如果 outputmask 參數被指定,那么就會在 outputmask 參數上進行繪制,outputmask 參數會被返回。否則這個 Mask 的大小是 self.get\_size() + othermask.get\_size() - (1, 1)。
### **pygame.mask.Mask.connected\_component()**
返回與某像素區域的連接的 Mask。
connected\_component((x,y) = None) -> Mask
它會使用 SAUF 算法進行連接需要連接的 Mask。它會連通 8 個點。默認情況下,它會返回在連接圖像中最大的 Mask。可選項: 一對指定的坐標,與其相連的組件會被返回。如果像素位置沒有被設置,那么返回的這個 Mask 就是空的。這個 Mask 的大小會與原始 Mask 一樣。
### **pygame.mask.Mask.connected\_components()**
返回一組連接某像素區域的 Mask 的列表。
connected\_components(min = 0) -> \[Masks\]
返回一組連接某像素區的 Mask 的列表。min 可選參數用于對每個連接區的指定部分過濾噪點。
### **pygame.mask.Mask.get\_bounding\_rects()**
返回一組像素邊界矩形的列表。
get\_bounding\_rects() -> Rects
它會獲取連接著像素塊的邊界矩形。每個邊界矩形都是一個連接每個像素的內矩形。
- 一、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