Python遊戲工具包---Pygame最常用的15個模塊詳解(附pdf版本)

↑ 點擊上方 一行數據” 關注 + 星標 ~ 

每週送書,絕不錯過

本文不查錯,三連送書

最近很多讀者想學習使用python來製作遊戲,其中最經典的工具包就是Pygame ,如果單純只看之前分享的是個遊戲代碼案例,直接來製作一款遊戲有些難度

python製作十款遊戲案例

所以今天行哥對pygame工具包進行了總結,並分享了pygame工具包最常用15個模塊的詳細方法,如果想獲取pdf版本可見文末鏈接

pygame中文手冊pdf版本:https://yihang.cowtransfer.com/s/7b027011c9cd4a

1.Color類

class pygame.Color

Pygame 中用於描述顏色的對象。Color(name) -> Color Color(r, g, b, a) -> Color Color(rgbvalue) -> Color

方法 & 屬性

  • pygame.Color.r  —  獲取或設置 Color 對象的紅色值

  • pygame.Color.g  —  獲取或設置 Color 對象的綠色值

  • pygame.Color.b  —  獲取或設置 Color 對象的藍色值

  • pygame.Color.a  —  獲取或設置 Color 對象的 alpha 值

  • pygame.Color.cmy  —  獲取或設置 Color 對象表示的 CMY 值

  • pygame.Color.hsva  —  獲取或設置 Color 對象表示的 HSVA 值

  • pygame.Color.hsla  —  獲取或設置 Color 對象表示的 HSLA 值

  • pygame.Color.i1i2i3  —  獲取或設置 Color 對象表示的 I1I2I3 值

  • pygame.Color.normalize()  —  返回 Color 對象的標準化 RGBA 值

  • pygame.Color.correct_gamma()  —  應用一定的伽馬值調整 Color 對象

  • pygame.Color.set_length()  —  設置 Color 對象的長度(成員數量)

Pygame 使用 Color 類表示 RGBA 顏色值,每個顏色值的取值範圍是 0 ~ 255。允許通過基本的算術運算創造新的顏色值,支持轉換爲其他顏色空間,例如 HSV 或 HSL,並讓你調整單個顏色通道。當沒有給出 alpha 的值默認是 255(不透明)。

“RGB值”可以是一個顏色名,一個 HTML 顏色格式的字符串,一個 16 進制數的字符串,或者一個整型像素值。HTML 格式是 "#rrggbbaa",其中 "rr","gg","bb","aa" 都是 2 位的 16 進制數。代表 alpha 的 "aa" 是可選的。16 進制數的字符串組成形式爲 "0xrrggbbaa",當然,其中的 "aa" 也是可選的。

2.display模塊

pygame.display

Pygame 中用於控制窗口和屏幕顯示的模塊。

注:爲了適應語境,display 在該文檔中有時翻譯爲“顯示”,有時翻譯爲“顯示界面”。

函數

  • pygame.display.init()  —  初始化 display 模塊

  • pygame.display.quit()  —  結束 display 模塊

  • pygame.display.get_init()  —  如果 display 模塊已經初始化,返回 True

  • pygame.display.set_mode()  —  初始化一個準備顯示的窗口或屏幕

  • pygame.display.get_surface()  —  獲取當前顯示的 Surface 對象

  • pygame.display.flip()  —  更新整個待顯示的  Surface 對象到屏幕上

  • pygame.display.update()  —  更新部分軟件界面顯示

  • pygame.display.get_driver()  —  獲取 Pygame 顯示後端的名字

  • pygame.display.Info()  —  創建有關顯示界面的信息對象

  • pygame.display.get_wm_info()  —  獲取關於當前窗口系統的信息

  • pygame.display.list_modes()  —  獲取全屏模式下可使用的分辨率

  • pygame.display.mode_ok()  —  爲顯示模式選擇最合適的顏色深度

  • pygame.display.gl_get_attribute()  —  獲取當前顯示界面 OpenGL 的屬性值

  • pygame.display.gl_set_attribute()  —  設置當前顯示模式的 OpenGL 屬性值

  • pygame.display.get_active()  —  當前顯示界面顯示在屏幕上時返回 True

  • pygame.display.iconify()  —  最小化顯示的  Surface 對象

  • pygame.display.toggle_fullscreen()  —  切換全屏模式和窗口模式

  • pygame.display.set_gamma()  —  修改硬件顯示的 gama 坡道

  • pygame.display.set_gamma_ramp()  —  自定義修改硬件顯示的 gama 坡道

  • pygame.display.set_icon()  —  修改顯示窗口的圖標

  • pygame.display.set_caption()  —  Set the current window caption

  • pygame.display.get_caption()  —  Get the current window caption

  • pygame.display.set_palette()  —  Set the display color palette for indexed displays 這個模塊提供控制 Pygame 顯示界面(display)的各種函數。Pygame 的  Surface  對象即可顯示爲一個窗口,也可以全屏模式顯示。當你創建並顯示一個常規的  Surface  對象後,在該對象上的改變並不會立刻反映到可見屏幕上,你必須選擇一個翻轉函數來顯示改動後的畫面。

顯示的原點是 (x=0, y=0) 的位置,及屏幕的左上角,座標軸向右下角增長。

Pygame 的 display 事實上可以有幾種初始化的方式。默認情況下,display 作爲一個軟件驅動的幀緩衝區。除此之外,你可以使用硬件加速和 OpenGL 支持的特殊模塊。這些是通過給 pygame.display.set_mode() 傳入 flags 參數來控制的。

Pygame 在任何時間內都只允許有一個顯示界面。使用 pygame.display.set_mode() 創建的新顯示界面會自動替換掉舊的。如果需要精確控制像素格式或顯示分辨率,使用 pygame.display.mode_ok(),pygame.display.list_modes(),和 pygame.display.Info() 來查詢顯示界面相關的信息。

一旦  Surface  對象的顯示界面被創建出來,這個模塊的函數就隻影響當前的顯示界面。如果該模塊未初始化, Surface  對象也會變爲“非法”。如果新的顯示模式被設置,當前的  Surface  對象將會自動切換到新的顯示界面。

當一個新的顯示模式被設置,會在 Pygame 的事件隊列中放入幾個相關事件。當用於希望關閉程序時,pygame.QUIT 事件會被髮送;當顯示界面獲得和失去焦點時,窗口會得到 pygame.ACTIVEEVENT 事件;如果顯示界面設置了 pygame.RESIZABLE 標誌,那麼當用戶調整窗口尺寸時,pygame.VIDEORESIZE 事件會被髮送;硬件顯示指當接收到 pygame.VIDEOEXPOSE 事件時,將部分需要被重繪的窗口直接繪製到屏幕上。

一些顯示環境擁有自動拉伸所有窗口的選項。當該選項被啓動時,自動拉伸會扭曲 Pygame 窗口的外觀。在 Pygame 的例子目錄中,有一個演示代碼(prevent_display_stretching.py)展示如何在微軟系統(Vista 以上系統)中關閉 Pygame 顯示的自動拉伸屬性。

函數詳解pygame.display.init()初始化 display 模塊。

init() -> None

初始化 Pygame 的 display 模塊。在初始化之前,display 模塊無法做任何事情。但當你調用更高級別的 pygame.init(),變會自動調用 pygame.display.init() 進行初始化。

初始化後,Pygame 將自動從幾個內部的顯示後端中選擇一個。顯示模式由平臺和當前用戶權限決定。在 display 模塊被初始化之前,可以通過環境變量 SDL_VIDEODRIVER 設置哪一個顯示後端將被使用。具有多種顯示後端的系統如下:

Windows : windib, directx
Unix : x11, dga, fbcon, directfb, ggi, vgl, svgalib, aalib

在一些平臺上,可以將 Pygame 的 display 嵌入到已經存在的窗口中。如果這麼做,環境變量 SDL_WINDOWID 必須被設置爲一個包含窗口 ID 或句柄的字符串。當 Pygame 的 display 被初始化的時候,將檢測環境變量。注意,在一個運行的窗口嵌入 display 會產生許多奇怪的副作用。

多次調用該函數並沒有任何問題,但也不會有什麼效果。

pygame.display.quit()

結束 display 模塊。

quit() -> None

這個函數會關閉整個 display 模塊。這將意味着任何一個活躍的顯示界面都將被關閉。當主程序退出時,該函數也會被自動調用。

多次調用該函數並沒有任何問題,但也不會有什麼效果。

pygame.display.get_init()

如果 display 模塊已經初始化,返回 True。

get_init() -> bool

如果 display 模塊已經初始化,返回 True。

pygame.display.set_mode()初始化一個準備顯示的窗口或屏幕。

set_mode(resolution=(0,0), flags=0, depth=0) -> Surface

這個函數將創建一個 Surface  對象的顯示界面。傳入的參數用於指定顯示類型。最終創建出來的顯示界面將是最大可能地匹配當前操作系統。

resolution 參數是一個二元組,表示寬和高。flags 參數是附件選項的集合。depth 參數表示使用的顏色深度。

返回的 Surface  對象可以像常規的 Surface  對象那樣去繪製,但發生的改變最終會顯示到屏幕上。

如果沒有傳入 resolution 參數,或者使用默認設置 (0, 0),且 Pygame 使用 SDL1.2.10 以上版本,那麼創建出來的 Surface 對象將與當前屏幕用戶一樣的分辨率。如果只有寬或高其中一項被設置爲 0,那麼 Surface 對象將使用屏幕分辨率的寬或高代替它。如果 SDL 版本低於 1.2.10,那麼將拋出異常。

通常來說,最好的做法是不要傳遞 depth 參數。因爲默認 Pygame 會根據當前操作系統選擇最好和最快的顏色深度。如果你的遊戲確實需要一個特殊的顏色格式,那麼你可以通過控制 depth 參數來實現。Pygame 將爲模擬一個非現成的顏色深度而耗費更多的時間。

當使用全屏顯示模式的時候,有時候無法完全匹配到需要的分辨率。在這種情況下,Pygame 將自動選擇最匹配的分辨率使用,而返回的 Surface  對象將保持與需求的分辨率一致。

flags 參數指定你想要的顯示類型。提供幾個選擇給你,你可以通過位操作同時使用多個類型(管道操作符 "|")。如果你傳入 0 或沒有傳入 flags 參數,默認會使用軟件驅動窗口。這兒是 flags 參數提供的幾個可選項:

選項含義
pygame.FULLSCREEN創建一個全屏顯示
pygame.DOUBLEBUF1. 雙緩衝模式 2. 推薦和 HWSURFACE 或 OPENGL 一起使用
pygame.HWSURFACE硬件加速,只有在 FULLSCREEN 下可以使用
pygame.OPENGL創建一個 OPENGL 渲染的顯示
pygame.RESIZABLE創建一個可調整尺寸的窗口
pygame.NOFRAME創建一個沒有邊框和控制按鈕的窗口

舉個例子:

# 在屏幕中創建一個 700 * 400 的窗口
screen_width=700
screen_height=400
screen=pygame.display.set_mode([screen_width, screen_height])

pygame.display.get_surface()獲取當前顯示的 Surface 對象。

get_surface() -> Surface

返回當前顯示的 Surface  對象。如果沒有設置任何顯示模式,那麼返回 None。

pygame.display.flip()更新整個待顯示的 Surface 對象到屏幕上。

flip() -> None

這個函數將更新整個顯示界面的內容。如果你的顯示模式使用了 pygame.HWSURFACE(硬件加速)和 pygame.DOUBLEBUF(雙緩衝)標誌,那麼將等待垂直會掃並切換顯示界面。如果你使用不同類型的顯示模式,那麼它將簡單的更新整個顯示界面的內容。

當使用 pygame.OPENGL(使用 OPENGL 渲染)顯示模式時,將創建一個 gl 緩衝切換區。

溫馨提示:垂直回掃是與視頻顯示相關的時間測量,它代表了一個幀的結束和下一幀的開始時間之間的時間間隔。

pygame.display.update()更新部分軟件界面顯示。

update(rectangle=None) -> None

update(rectangle_list) -> None

這個函數可以看作是 pygame.display.flip() 函數在軟件界面顯示的優化版。它允許更新屏幕的部分內容,而不必完全更新。如果沒有傳入任何參數,那麼該函數就像 pygame.display.flip() 那樣更新整個界面。

你可以傳遞一個或多個矩形區域給該函數。一次性傳遞多個矩形區域比多次傳遞更有效率。如果傳入的是一個空列表或者 None,那麼將忽略參數。

該函數不能在 pygame.OPENGL 顯示模式下調用,否則會拋出異常。

pygame.display.get_driver()獲取 Pygame 顯示後端的名字。

get_driver() -> name

初始化的時候,Pygame 會從多個可用的顯示後端中選擇一個。這個函數返回顯示後端內部使用的名字。可以用來提供有關顯示性能加速的一些信息。可以參考 pygame.display.set_mode() 的 SDL_VIDEODRIVER 環境變量。

pygame.display.Info()創建有關顯示界面的信息對象。

Info() -> VideoInfo

創建一個對象,包含對當前圖形環境一些屬性的描述。在一些平臺上,如果這個函數在 pygame.display.set_mode() 前被調用,可以提供一些關於默認顯示模式的信息。也可以在設置完顯示模式後調用該函數,以確認顯示選項是否如願以償。

返回的 VideoInfo 對象包含以下這些屬性:

屬性含義
hw如果是 True,則表示啓用硬件加速
wm如果是 True,則表示顯示窗口模式
video_mem表示顯存是多少兆字節(mb),0 表示不清楚
bitsize表示每個像素存放多少位
bytesize表示每個像素存放多少字節
masks4 個值用於打包像素的 RGBA 值
shifts4 個值用於打包像素的 RGBA 值
losses4 個值用於打包像素的 RGBA 值
blit_hw如果是 True,則表示加速硬件驅動的 Surface  對象繪製
blit_hw_CC如果是 True,則表示加速硬件驅動的 Surface 對象 colorkey 繪製
blit_hw_A如果是 True,則表示加速硬件驅動的 Surface  對象 pixel alpha 繪製
blit_sw如果是 True,則表示加速軟件驅動的 Surface 對象繪製
blit_sw_CC如果是 True,則表示加速軟件驅動的 Surface 對象 colorkey 繪製
blit_sw_A如果是 True,則表示加速軟件驅動的Surface 對象 pixel alpha 繪製
current_w, current_h1. 表示當前顯示模式的寬和高(如果在 display.set_mode() 前被調用,則表示當前桌面的寬和高)2. current_w, current_h 在 Pygame 1.8.0 以後,SDL 1.2.10 以後才支持3. -1 表示錯誤,或者 SDL 版本太舊

pygame.display.get_wm_info()獲取關於當前窗口系統的信息。

get_wm_info() -> dict

創建一個由操作系統填充數據的字典。一些操作系統可能不會往裏邊填充信息,則返回一個空字典。大多數平臺將返回一個 "window" 鍵,對應的值是當前顯示界面的系統 ID。

Pygame 1.7.1 新增加的。

pygame.display.list_modes() 獲取全屏模式下可使用的分辨率。

list_modes(depth=0, flags=pygame.FULLSCREEN) -> list

這個函數返回一個列表,包含指定顏色深度所支持的所有分辨率。如果顯示模式非全屏,則返回一個空列表。如果返回 -1 表示支持任何分辨率(類似於窗口模式)。返回的列表由大到小排列。

如果顏色深度是 0,SDL 將選擇當前/最合適的顏色深度顯示。flags 參數默認值是 pygame.FULLSCREEN,但你可能需要添加額外的全屏模式標誌。

pygame.display.mode_ok()爲顯示模式選擇最合適的顏色深度。

mode_ok(size, flags=0, depth=0) -> depth

這個函數使用與 pygame.display.set_mode() 函數一樣的參數。一般用於判斷一個顯示模式是否可用。如果顯示模式無法設置,則返回 0。正常情況下將會返回顯示需求的像素深度。

通常不用理會 depth 參數,除非一些支持多個顯示深度的平臺,它會提示哪個顏色深度是更合適的。

最有用的 flags 參數是 pygame.HWSURFACE,pygame.DOUBLEBUF 和 pygame.FULLSCREEN。如果這些標誌不支持,那麼該函數會返回 0。

pygame.display.gl_get_attribute()獲取當前顯示界面 OpenGL 的屬性值。

gl_get_attribute(flag) -> value

在調用設置了 pygame.OPENGL 標誌的 pygame.display.set_mode() 函數之後,檢查 OpenGL 的屬性值不失爲一個好的習慣。參考 pygame.display.gl_set_attribute() 關於合法標誌的列表。

pygame.display.gl_set_attribute()設置當前顯示模式的 OpenGL 屬性值。

gl_set_attribute(flag, value) -> None

當調用設置了 pygame.OPENGL 標誌的 pygame.display.set_mode() 函數時,Pygame 會自動設置 OpenGL 的一些屬性值,例如顏色和雙緩衝區。OpenGL 其實還提供了其他一些屬性值供你控制。在 flag 參數中傳入屬性名,並將其值設置在 value 參數中。這個函數必須在 pygame.display.set_mode() 前設置。

這些 OPENGL 標誌是:

GL_ALPHA_SIZE, GL_DEPTH_SIZE, GL_STENCIL_SIZE, GL_ACCUM_RED_SIZE, GL_ACCUM_GREEN_SIZE,  GL_ACCUM_BLUE_SIZE, GL_ACCUM_ALPHA_SIZE, GL_MULTISAMPLEBUFFERS, GL_MULTISAMPLESAMPLES, GL_STEREO

pygame.display.get_active()當前顯示界面顯示在屏幕上時返回 True。

get_active() -> bool

pygame.display.set_mode() 函數被調用之後,Surface 對象將被顯示在屏幕上。大多數窗口都支持隱藏,如果顯示的 Surface  對象被隱藏和最小化,那麼該函數將返回 False。

pygame.display.iconify()最小化顯示的 Surface  對象。

iconify() -> bool

將顯示的Surface 對象最小化或隱藏。並不是所有的操作系統都支持最小化顯示界面。如果該函數調用成功,返回 True。

當顯示界面最小化時,pygame.display.get_active() 返回 False。事件隊列將接收到 ACTIVEEVENT 事件。

pygame.display.toggle_fullscreen() 切換全屏模式和窗口模式。

toggle_fullscreen() -> bool

切換全屏模式和窗口模式。這個函數只在 unix x11 顯示驅動下工作。在大多數情況下,建議調用 pygame.display.set_mode() 創建一個新的顯示模式進行切換。

pygame.display.set_gamma()修改硬件顯示的 gama 坡道。

set_gamma(red, green=None, blue=None) -> bool

設置硬件驅動顯示的紅色、綠色和藍色伽馬值。如果沒有傳遞 green 和 blue 參數,它們將與 red 值相等。不是所有的操作系統和硬件都支持伽馬坡道。如果函數修改成功,則返回 True。

伽馬值爲 1.0 創建一個線性顏色表,較低的值會使屏幕變暗,較高的值會使屏幕變量。

pygame.display.set_gamma_ramp()自定義修改硬件顯示的 gama 坡道

set_gamma_ramp(red, green, blue) -> bool

使用自定義表設置硬件驅動顯示的紅色、綠色和藍色伽馬坡道。每個參數必須是 256 位整數的列表。每位整數應該在 0 和 0xffff 之間。不是所有的操作系統和硬件都支持伽馬坡道。如果函數修改成功,則返回 True。

pygame.display.set_icon()修改顯示窗口的圖標。

set_icon(Surface) -> None

設置顯示窗口執行時的圖標。所有的操作系統默認都是以簡單的 Pygame LOGO 作爲圖標。

你可以傳入任何 Surface  對象作爲圖標,但大多數操作系統要求圖標的大小是 32 * 32。圖標可以設置 colorkey 透明度。

一些操作系統不允許修改顯示中的窗口圖標。對於這類操作系統,該函數需要再調用 pygame.display.set_mode() 前先創建並設置圖標。

pygame.display.set_caption()設置當前窗口的標題欄。

set_caption(title, icontitle=None) -> None

如果顯示窗口擁有一個標題欄,這個函數將修改窗口標題欄的文本。一些操作系統支持最小化窗口時切換標題欄,通過設置 icontitle 參數實現。

pygame.display.get_caption()獲取當前窗口的標題欄。

get_caption() -> (title, icontitle)

返回當前窗口的標題欄和最小化標題欄,通常這兩個值是一樣的。

pygame.display.set_palette()設置顯示界面的調色板。

set_palette(palette=None) -> None

這個函數將修改顯示界面的 8 位調色板。這不會改變Surface 對象實際的調色板,僅用於 Surface 對象的顯示。如果沒有傳入參數,將恢復系統默認調色板。調色板是一組 RGB 三元組序列。

3.draw 模塊

pygame.draw Pygame 中繪製圖形的模塊。

函數

  • pygame.draw.rect()  —  繪製矩形

  • pygame.draw.polygon()  —  繪製多邊形

  • pygame.draw.circle()  —  根據圓心和半徑繪製圓形

  • pygame.draw.ellipse()  —  根據限定矩形繪製一個橢圓形

  • pygame.draw.arc()  —  繪製弧線

  • pygame.draw.line()  —  繪製線段

  • pygame.draw.lines()  —  繪製多條連續的線段

  • pygame.draw.aaline()  —  繪製抗鋸齒的線段

  • pygame.draw.aalines()  —  繪製多條連續的線段(抗鋸齒)

該模塊用於在 Surface 對象上繪製一些簡單的形狀。這些函數將渲染到任何格式的 Surface 對象上。硬件渲染會比普通的軟件渲染更耗時。

大部分函數用 width 參數指定圖形邊框的大小,如果 width = 0 則表示填充整個圖形。

所有的繪圖函數僅能在 Surface 對象的剪切區域生效。這些函數返回一個 Rect,表示包含實際繪製圖形的矩形區域。

大部分函數都有一個 color 參數,傳入一個表示 RGB 顏色值的三元組,當然也支持 RGBA 四元組。其中的 A 是 Alpha 的意思,用於控制透明度。不過該模塊的函數並不會繪製透明度,而是直接傳入到對應 Surface  對象的 pixel alphas 中。color 參數也可以是已經映射到 Surface  對象的像素格式中的整型像素值。

當這些函數在繪製時,必須暫時鎖定 Surface  對象。許多連續繪製的函數可以通過一次性鎖定直到畫完再解鎖來提高效率。

函數詳解pygame.draw.rect()繪製矩形。

rect(Surface, color, Rect, width=0) -> Rect

在 Surface  對象上繪製一個矩形。Rect 參數指定矩形的位置和尺寸。width 參數指定邊框的寬度,如果設置爲 0 則表示填充該矩形。

pygame.draw.polygon()繪製多邊形。

polygon(Surface, color, pointlist, width=0) -> Rect 在 Surface  對象上繪製一個多邊形。pointlist 參數指定多邊形的各個頂點。width 參數指定邊框的寬度,如果設置爲 0 則表示填充該矩形。

繪製一個抗鋸齒的多邊形,只需要將 aalines() 的 closed 參數設置爲 True 即可。

pygame.draw.circle()根據圓心和半徑繪製圓形。

circle(Surface, color, pos, radius, width=0) -> Rect

在 Surface  對象上繪製一個圓形。pos 參數指定圓心的位置,radius 參數指定圓的半徑。width 參數指定邊框的寬度,如果設置爲 0 則表示填充該矩形。

pygame.draw.ellipse()根據限定矩形繪製一個橢圓形。

ellipse(Surface, color, Rect, width=0) -> Rect

在 Surface  對象上繪製一個橢圓形。Rect 參數指定橢圓外圍的限定矩形。width 參數指定邊框的寬度,如果設置爲 0 則表示填充該矩形。

pygame.draw.arc()繪製弧線。

arc(Surface, color, Rect, start_angle, stop_angle, width=1) -> Rect

在 Surface  對象上繪製一條弧線。Rect 參數指定弧線所在的橢圓外圍的限定矩形。兩個 angle 參數指定弧線的開始和結束位置。width 參數指定邊框的寬度。

pygame.draw.line()繪製線段。

line(Surface, color, start_pos, end_pos, width=1) -> Rect

在 Surface  對象上繪製一條線段。兩端以方形結束。

pygame.draw.lines()繪製多條連續的線段。

lines(Surface, color, closed, pointlist, width=1) -> Rect

在 Surface  對象上繪製一系列連續的線段。pointlist 參數是一系列短點。如果 closed 參數設置爲 True,則繪製首尾相連。

pygame.draw.aaline()繪製抗鋸齒的線段。

aaline(Surface, color, startpos, endpos, blend=1) -> Rect

在 Surface  對象上繪製一條抗鋸齒的線段。blend 參數指定是否通過繪製混合背景的陰影來實現抗鋸齒功能。該函數的結束位置允許使用浮點數。

pygame.draw.aalines()繪製多條連續的線段(抗鋸齒)。

aalines(Surface, color, closed, pointlist, blend=1) -> Rect

在 Surface  對象上繪製一系列連續的線段(抗鋸齒)。如果 closed 參數爲 True,則首尾相連。blend 參數指定是否通過繪製混合背景的陰影來實現抗鋸齒功能。該函數的結束位置允許使用浮點數。

image
# 公衆號:一行數據
import pygame
import sys
import math
from pygame.locals import *
 
pygame.init()
 
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
 
points = [(200, 175), (300, 125), (400, 175), (450, 125), (450, 225), (400, 175), (300, 225)]
 
size = width, height = 640, 1000
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Python Demo")
 
clock = pygame.time.Clock()
 
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
 
    screen.fill(WHITE)
    
    pygame.draw.rect(screen, BLACK, (50, 30, 150, 50), 0)
    pygame.draw.rect(screen, BLACK, (250, 30, 150, 50), 1)
    pygame.draw.rect(screen, BLACK, (450, 30, 150, 50), 10)
 
    pygame.draw.polygon(screen, GREEN, points, 0)
 
    pygame.draw.circle(screen, RED, (320, 400), 25, 1)
    pygame.draw.circle(screen, GREEN, (320, 400), 75, 1)
    pygame.draw.circle(screen, BLUE, (320, 400), 125, 1)
 
    pygame.draw.ellipse(screen, BLACK, (100, 600, 440, 100), 1)
    pygame.draw.ellipse(screen, BLACK, (220, 550, 200, 200), 1)
 
    pygame.draw.arc(screen, BLACK, (100, 800, 440, 100), 0, math.pi, 1)
    pygame.draw.arc(screen, BLACK, (220, 750, 200, 200), math.pi, math.pi * 2, 1)
 
    pygame.display.flip()
 
    clock.tick(10)

4.event模塊

pygame.event用於處理事件與事件隊列的 Pygame 模塊。

函數

  • pygame.event.pump()  —  讓 Pygame 內部自動處理事件

  • pygame.event.get()  —  從隊列中獲取事件

  • pygame.event.poll()  —  從隊列中獲取一個事件

  • pygame.event.wait()  —  等待並從隊列中獲取一個事件

  • pygame.event.peek()  —  檢測某類型事件是否在隊列中

  • pygame.event.clear()  —  從隊列中刪除所有的事件

  • pygame.event.event_name()  —  通過 id 獲得該事件的字符串名字

  • pygame.event.set_blocked()  —  控制哪些事件禁止進入隊列

  • pygame.event.set_allowed()  —  控制哪些事件允許進入隊列

  • pygame.event.get_blocked()  —  檢測某一類型的事件是否被禁止進入隊列

  • pygame.event.set_grab()  —  控制輸入設備與其他應用程序的共享

  • pygame.event.get_grab()  —  檢測程序是否共享輸入設備

  • pygame.event.post()  —  放置一個新的事件到隊列中

  • pygame.event.Event()  —  創建一個新的事件對象

  • pygame.event.EventType  —  代表 SDL 事件的 Pygame 對象 Pygame 通過事件隊列控制所有的時間消息。該模塊中的程序將幫你管理事件隊列。輸入隊列很大程度依賴於 pygame 的 display 模塊。如果 display 沒有被初始化,顯示模式沒有被設置,那麼事件隊列就還沒有開始真正工作。

常規的隊列是由 pygame.event.EventType 定義的事件對象的組成,有多種方法來訪問裏邊的事件對象:從簡單的檢測事件是否存在,到直接從棧中獲取它們。

所有事件都有一個類型標識符,這個標識符對應的值定義在 NOEVENT 到 NUMEVENTS 之間(溫馨提示:類似於 C 語言的宏定義,明白?)。用戶可以自行定義事件,但類型標識符的值應該高於或等於 USEREVENT。

獲取各種輸入設備的狀態,推薦你直接通過它們相應的模塊(mouse,key 和 joystick)提供的函數訪問,而不是通過事件隊列;如果你使用此函數,請記住,Pygame 需要通過一些方式與系統的窗口管理器和平臺的其他部分進行通信。爲了保持 Pygame 和系統同步,你需要調用 pygame.event.pump() 確保實時更新,你將在遊戲的每次循環中調用這個函數。

事件隊列提供了一些簡單的過濾。通過阻止某些事件進入事件隊列,可以略微提高遊戲的性能(溫馨提示:因爲這樣事件隊列的尺寸就會小一些,所以說可以略微提升性能)。使用 pygame.event.set_allowed() 和 pygame.event.set_blocked() 來控制某些事件是否允許進入事件隊列。默認所有事件都會進入事件隊列。

事件子系統應該在主線程被調用。如果你希望從其他線程中投遞事件消息進入事件隊列,請使用 fastevent 包。

Joysticks(遊戲手柄)只有在設備初始化後纔會發送事件。

一個 EventType 事件對象包含一個事件類型標識符和一組成員數據(事件對象不包含方法,只有數據)。EventType 對象從 Python 的事件隊列中獲得,你也可以使用 pygame.event.Event() 函數創建自定義的新事件。

由於 SDL 的事件隊列限制了事件數量的上限(標準的 SDL 1.2 限制爲 128),所以當隊列已滿時,新的事件將會被扔掉。爲了防止丟失事件消息,尤其是代表退出的輸入事件(因爲當用戶點擊退出按鈕沒有反應,往往會被認爲“死機”了),你的程序必須定期檢測事件,並對其進行處理。

爲了加快事件隊列的處理速度,可以使用 pygame.event.set_blocked() 函數阻止一些我們不關注的事件進入隊列中。

所有的 EventType 實例對象都擁有一個事件類型標識符,屬性名是 type。你也可以通過事件對象的 dict 屬性來完全訪問其他屬性。所有其他成員屬性的值都是通過事件對象的字典來傳遞。

5.font模塊

pygame.fontPygame 中加載和表示字體的模塊。

函數

  • pygame.font.init()  ——  初始化字體模塊

  • pygame.font.quit()  ——  還原字體模塊

  • pygame.font.get_init()  ——  檢查字體模塊是否被初始化

  • pygame.font.get_default_font()  ——  獲得默認字體的文件名

  • pygame.font.get_fonts()  ——  獲取所有可使用的字體

  • pygame.font.match_font()  ——  在系統中搜索一種特殊的字體

  • pygame.font.SysFont()  ——  從系統字體庫創建一個 Font 對象 類

  • pygame.font.Font   ——  從一個字體文件創建一個 Font 對象 字體模塊可以在一個新的 Surface 對象上表示 TrueType 字體。它接受所有 UCS-2 字符('u0001' 到 'uFFFF')。此模塊爲可選擇模塊,並且依賴於 SDL_ttf。在使用之前,你需要先測試該模塊是否可用,而且對其進行初始化。

通過使用現有的 Font 對象,可以完成大多數與字體有關的工作。Pygame.font 模塊自身僅可以完成常規的初始化以及通過 pygame.font.Font() 創建 Font 對象。

你可以通過使用 pygame.font.SysFont() 函數從系統內加載字體。另外還有其他幾個函數可以幫助你搜索系統的字體。

Pygame 配備了內建的默認字體。通過傳遞 "None" 爲文件名訪問此字體。

在 pygame 第一次導入之前,當pygame.font 模塊確定環境變量 PYGAME_FREETYPE 時使用基於 pygame.ftfont 的 pygame.freetype 模塊。Pygame.ftfont 是一個pygame.font 可兼容模塊,兼容絕大部分,除開其中某個字體模塊單元測試:Pygame.ftfont 並沒有基於字體模塊的 SDL_ttf 的 UCS-2 字符限制,所以對於大於 'uFFFF' 的碼點會產生異常。如果 pygame.freetype 是不可使用的,那麼 SDL_ttf 字體模塊將會被加載用於替代。

常用函數詳解類 class pygame.font.Font 從一個字體文件創建一個 Font 對象。

Font(filename, size) -> Font

Font(object, size) -> Font

方法

  • pygame.font.Font.render()  ——  在一個新 Surface 對象上繪製文本

  • pygame.font.Font.size()  ——  確定多大的空間用於表示文本

  • pygame.font.Font.set_underline()  ——  控制文本是否用下劃線渲染

  • pygame.font.Font.get_underline()  ——  檢查文本是否繪製下劃線

  • pygame.font.Font.set_bold()  ——  啓動粗體字渲染

  • pygame.font.Font.get_bold()  ——  檢查文本是否使用粗體渲染

  • pygame.font.Font.set_italic()  ——  啓動斜體字渲染

  • pygame.font.Font.metrics()  ——  獲取字符串參數每個字符的參數

  • pygame.font.Font.get_italic()  ——  檢查文本是否使用斜體渲染

  • pygame.font.Font.get_linesize()  ——  獲取字體文本的行高

  • pygame.font.Font.get_height()  ——  獲取字體的高度

  • pygame.font.Font.get_ascent()  ——  獲取字體頂端到基準線的距離

  • pygame.font.Font.get_descent()  ——  獲取字體底端到基準線的距離

  • 根據提供的文件名或者 python 文件對象加載一個新的字體。字體的高度是以像素爲單位。如果文件名是 "None",則加載 Pygame 的默認字體。如果一個字體無法由給定的參數加載,將會產生一個異常。一旦字體已經創建完畢,那麼字體的尺寸將不能修改。

字體對象主要被用於在新 Surface 對象中渲染文本。文本可以渲染爲仿真的粗體或者斜體特徵,但最好是加載的字體本身就帶有粗體或者斜體字形。可以用普通字符串或者 Unicode 編碼字符來渲染文本。

方法詳解

pygame.font.Font.render() 在一個新 Surface 對象上繪製文本。

render(text, antialias, color, background=None) -> Surface

該函數創建一個新的 Surface 對象,並在上邊渲染指定的文本。Pygame 沒有提供直接的方式在一個現有的 Surface 對象上繪製文本,取而代之的方法是:使用 Font.render() 函數創建一個渲染了文本的圖像(Surface 對象),然後將這個圖像繪製到目標 Surface 對象上。

僅支持渲染一行文本:“換行”字符不會被渲染。空字符('x00')被渲染將產生一個 TypeError 錯誤。Unicode 和 char(字節)字符串都可以被接受。對於 Unicode 字符串,僅 UCS-2 字符範圍('u0001' 到 'uFFFF')被認爲是有效的。任何編碼值更大字符的字符會產生一個 UnicodeError 的錯誤;對於 char 字符串,默認的是使用 LATIN1 編碼。color 參數決定的是文本的顏色(例如:(0, 0, 255) 表示藍色)。可選參數 background 決定了文本的背景顏色。如果沒有傳遞 background 參數,則對應區域內表示的文本背景將會被設置爲透明。

返回的 Surface 對象將保持表示文本所需要的尺寸(與 Font.size() 所返回的尺寸相同)。如果將一個空字符串渲染爲文本,將會返回一個空白 Surface 對象,它僅有一個像素點的寬度,但高度與字體高度一樣。

由於取決於文本背景的類型和抗鋸齒功能的使用,該函數將會返回不同類型的 Surface 對象。出於性能上的考慮,瞭解何種類型的圖像會被使用是很有幫助的:如果抗鋸齒功能沒有被使用,返回的圖像將採用二元調色的 8 位圖像。此時如果背景是透明的,只設置一個 colorkey 來實現;抗鋸齒圖像會被渲染爲 24 位 RGB 圖像。此時如果背景是透明的,每個像素都將包含一個 alpha 通道。

優化:如果你已知文本最終將繪製在一個純色的背景上,那麼文本是抗鋸齒的,你可以通過指定文本的背景色來提高性能(將文本背景色設置目標 Surface 對象的顏色)。使用這個技巧,你只需用一個 colorkey 即可保持透明信息,而不需要設置每個像素的 alpha 通道值(這樣效率會低很多)。

如果你嘗試渲染 '\n',通常是顯示爲一個矩形(未知字符)。因此,你需要自己想辦法處理換行。

字體渲染並不是線程安全的行爲:在任何時候僅有一個線程可以渲染文本。

6.image模塊

pygame.image用於圖像傳輸的 Pygame 模塊。

函數

  • pygame.image.load()  —  從文件加載新圖片

  • pygame.image.save()  —  將圖像保存到磁盤上

  • pygame.image.get_extended()  —  檢測是否支持載入擴展的圖像格式

  • pygame.image.tostring()  —  將圖像轉換爲字符串描述

  • pygame.image.fromstring()  —  將字符串描述轉換爲圖像

  • pygame.image.frombuffer()  —  創建一個與字符串描述共享數據的 Surface 對象 image 模塊包含了加載和保存圖像的函數,同時轉換爲 Surface 對象支持的格式。

注意:沒有 Image 類;當一個圖像被成功載入後,將轉換爲 Surface  對象。Surface  對象允許你在上邊畫線、設置像素、捕獲區域等。

Image 是 Pygame 相當依賴的一個模塊,支持載入的圖像格式如下:

  • JPG

  • PNG

  • GIF(無動畫)

  • BMP

  • PCX

  • TGA(無壓縮)

  • TIF

  • LBM(和 PBM)

  • PBM(和 PGM,PPM)

  • XPM 支持保存爲以下格式:

  • BMP

  • TGA

  • PNG

  • JPEG 其中,保存爲 PNG 和 JPEG 格式是 Pygame 1.8 新增加的。

函數詳解pygame.image.load()從文件加載新圖片。

load(filename) -> Surface

load(fileobj, namehint=””) -> Surface

從文件加載一張圖片,你可以傳遞一個文件路徑或一個 Python 的文件對象。

Pygame 將自動判斷圖像的格式(比如 GIF 或位圖)並創建一個新的 Surface  對象。有時它可能需要知道文件的後綴名(比如 GIF 圖像應該以 ".gif" 爲後綴)。如果你傳入原始文件對象,你需要傳入它對應的文件名到 namehint 參數中。

返回的 Surface  對象將包含與源文件相同的顏色格式,colorkey 和 alpha 透明度通道。你通常需要調用 Surface.convert() 函數進行轉換,這樣可以使得在屏幕上繪製的速度更快。

對於含有 alpha 通道的圖片(支持部分位置透明,像 PNG 圖像),需要使用 Surface.convert_alpha() 函數進行轉換。

在某些環境下,Pygame 可能無法支持上述所有的圖像格式,但至少無壓縮的 BMP 格式是支持的。你可以調用 pygame.image.get_extended() 函數,如果返回 True,說明可以加載上述的格式(包含 PNG,JPG 和 GIF)。

你應該使用 os.path.join() 提高代碼的兼容性:

asurf = pygame.image.load(os.path.join('data', 'Python.png'))

pygame.image.save()將圖像保存到磁盤上。

save(Surface, filename) -> None

該函數將保存 Surface  對象到磁盤上,支持存儲爲 BMP,TGA,PNG 或 JPEG 格式的圖像。如果 filename 沒有指定後綴名,那麼默認是保存爲 TGA 格式。TGA 和 BMP 格式是無壓縮的文件。

保存爲 PNG 和 JPEG 格式是 Pygame 1.8 新增的。

pygame.image.get_extended()檢測是否支持載入擴展的圖像格式。

get_extended() -> bool

如果 Pygame 支持上述所有的擴展圖像格式,則返回 True。

pygame.image.tostring()將圖像轉換爲字符串描述。

tostring(Surface, format, flipped=False) -> string

將圖像轉換爲一個字符串描述,可以被 Python 的其他圖像模塊通過 "fromstring" 轉換回圖像。一些 Python 圖像模塊喜歡“自下而上”的存儲格式(例如 PyOpenGL)。如果 flipped 參數爲 True,那麼字符串將會垂直翻轉以適用這類圖像模塊。

format 參數可以是下表中任何一個字符串。注意:只有 8 位的 Surface  對象可以使用 "P" 格式。其他格式可以用於任何 Surface  對象上。

pygame.image.fromstring()將字符串描述轉換爲圖像。

fromstring(string, size, format, flipped=False) -> Surface

該函數的使用跟 pygame.image.tostring() 相似。size 參數是一對錶示寬度和高度的數字。一旦新的 Surface 對象創建成功,你就可以刪除字符串描述。

size 和 format 參數指定的數據需要跟字符串描述相符,否則將拋出異常。

更快地將圖片轉換到 Pygame,請參考 pygame.image.frombuffer() 函數。

pygame.image.frombuffer()創建一個與字符串描述共享數據的 Surface 對象。

frombuffer(string, size, format) -> Surface

創建一個新的 Surface 對象,與字符串描述直接共享像素數據。該函數的使用跟 pygame.image.fromstring() 類似,但沒法垂直翻轉原始數據。

該函數的速度會比 pygame.image.fromstring() 快很多,因爲該函數不需要申請和拷貝任何像素數據。

7.key模塊

pygame.key與鍵盤相關的 Pygame 模塊。

函數

  • pygame.key.get_focused()  —  當窗口獲得鍵盤的輸入焦點時返回 True

  • pygame.key.get_pressed()  —  獲取鍵盤上所有按鍵的狀態

  • pygame.key.get_mods()  —  檢測是否有組合鍵被按下

  • pygame.key.set_mods()  —  臨時設置某些組合鍵爲被按下狀態

  • pygame.key.set_repeat()  —  控制重複響應持續按下按鍵的時間

  • pygame.key.get_repeat()  —  獲取重複響應按鍵的參數

  • pygame.key.name()  —  獲取按鍵標識符對應的名字 該模塊包含處理與鍵盤操作相關的函數。當鍵盤按鍵被按下和釋放時,事件隊列將獲得 pygame.KEYDOWN 和 pygame.KEYUP 事件消息。這兩個消息均包含 key 屬性,是一個整數的 id,代表鍵盤上具體的某個按鍵。

pygame.KYEDOWN 事件還有個額外的屬性 unicode 和 scancode。unicode 代表一個按鍵翻譯後的 Unicode 編碼,這包含 shift 按鍵和組合鍵。scancode 是掃描碼,不同鍵盤間該值可能不同。不過這對於特殊按鍵像多媒體鍵的選擇是有用的。

溫馨提示:當鍵盤按下的時候,鍵盤會發送一個掃描碼給系統。掃描碼是鍵盤反饋哪一個按鍵被按下的方式,不同類型的鍵盤掃描碼不同。再由系統調用相應的函數將其轉換爲統一的 Unicode 編碼。

key 屬性的值是一個數字,爲了方便使用,Pygame 將這些數字定義爲以下這些常量:

KeyASCIIASCII描述
K_BACKSPACE\b退格鍵(Backspace)
K_TAB\t製表鍵(Tab)
K_CLEAR
清楚鍵(Clear)
K_RETURN\r回車鍵(Enter)
K_PAUSE
暫停鍵(Pause)
K_ESCAPE^[退出鍵(Escape)
K_SPACE
空格鍵(Space)
K_EXCLAIM!感嘆號(exclaim)
K_QUOTEDBL"雙引號(quotedbl)
K_HASH#井號(hash)
K_DOLLAR$美元符號(dollar)
K_AMPERSAND&and 符號(ampersand)
K_QUOTE'單引號(quote)
K_LEFTPAREN(左小括號(left parenthesis)
K_RIGHTPAREN)右小括號(right parenthesis)
K_ASTERISK*星號(asterisk)
K_PLUS+加號(plus sign)
K_COMMA,逗號(comma)
K_MINUS-減號(minus sign)
K_PERIOD.句號(period)
K_SLASH/正斜槓(forward slash)
K_000
K_111
K_222
K_333
K_444
K_555
K_666
K_777
K_888
K_999
K_COLON:冒號(colon)
K_SEMICOLON;分號(semicolon)
K_LESS<小於號(less-than sign)
K_EQUALS=等於號(equals sign)
K_GREATER>大於號(greater-than sign)
K_QUESTION?問號(question mark)
K_AT@at 符號(at)
K_LEFTBRACKET[左中括號(left bracket)
K_BACKSLASH|反斜槓(backslash)
K_RIGHTBRACKET]右中括號(right bracket)
K_CARET^脫字符(caret)
K_UNDERSCORE_下劃線(underscore)
K_BACKQUOTE`重音符(grave)
K_aaa
K_bbb
K_ccc
K_ddd
K_eee
K_fff
K_ggg
K_hhh
K_iii
K_jjj
K_kkk
K_lll
K_mmm
K_nnn
K_ooo
K_ppp
K_qqq
K_rrr
K_sss
K_ttt
K_uuu
K_vvv
K_www
K_xxx
K_yyy
K_zzz
K_DELETE
刪除鍵(delete)
K_KP0
0(小鍵盤)
K_KP1
1(小鍵盤)
K_KP2
2(小鍵盤)
K_KP3
3(小鍵盤)
K_KP4
4(小鍵盤)
K_KP5
5(小鍵盤)
K_KP6
6(小鍵盤)
K_KP7
7(小鍵盤)
K_KP8
8(小鍵盤)
K_KP9
9(小鍵盤)
K_KP_PERIOD.句號(小鍵盤)
K_KP_DIVIDE/除號(小鍵盤)
K_KP_MULTIPLY*乘號(小鍵盤)
K_KP_MINUS-減號(小鍵盤)
K_KP_PLUS+加號(小鍵盤)
K_KP_ENTER\r回車鍵(小鍵盤)
K_KP_EQUALS=等於號(小鍵盤)
K_UP
向上箭頭(up arrow)
K_DOWN
向下箭頭(down arrow)
K_RIGHT
向右箭頭(right arrow)
K_LEFT
向左箭頭(left arrow)
K_INSERT
插入符(insert)
K_HOME
Home 鍵(home)
K_END
End 鍵(end)
K_PAGEUP
上一頁(page up)
K_PAGEDOWN
下一頁(page down)
K_F1
F1
K_F2
F2
K_F3
F3
K_F4
F4
K_F5
F5
K_F6
F6
K_F7
F7
K_F8
F8
K_F9
F9
K_F10
F10
K_F11
F11
K_F12
F12
K_F13
F13
K_F14
F14
K_F15
F15
K_NUMLOCK
數字鍵盤鎖定鍵(numlock)
K_CAPSLOCK
大寫字母鎖定鍵(capslock)
K_SCROLLOCK
滾動鎖定鍵(scrollock)
K_RSHIFT
右邊的 shift 鍵(right shift)
K_LSHIFT
左邊的 shift 鍵(left shift)
K_RCTRL
右邊的 ctrl 鍵(right ctrl)
K_LCTRL
左邊的 ctrl 鍵(left ctrl)
K_RALT
右邊的 alt 鍵(right alt)
K_LALT
左邊的 alt 鍵(left alt)
K_RMETA
右邊的元鍵(right meta)
K_LMETA
左邊的元鍵(left meta)
K_LSUPER
左邊的 Window 鍵(left windows key)
K_RSUPER
右邊的 Window 鍵(right windows key)
K_MODE
模式轉換鍵(mode shift)
K_HELP
幫助鍵(help)
K_PRINT
打印屏幕鍵(print screen)
K_SYSREQ
魔術鍵(sysrq)
K_BREAK
中斷鍵(break)
K_MENU
菜單鍵(menu)
K_POWER
電源鍵(power)
K_EURO
歐元符號(euro)

還有一個 mod 屬性,用於描述組合鍵狀態。

以下是組合鍵的常量定義:

KeyASCII描述
KMOD_NONE木有同時按下組合鍵
KMOD_LSHIFT同時按下左邊的 shift 鍵
KMOD_RSHIFT同時按下右邊的 shift 鍵
KMOD_SHIFT同時按下 shift 鍵
KMOD_CAPS同時按下大寫字母鎖定鍵
KMOD_LCTRL同時按下左邊的 ctrl 鍵
KMOD_RCTRL同時按下右邊的 ctrl 鍵
KMOD_CTRL同時按下 ctrl 鍵
KMOD_LALT同時按下左邊的 alt 鍵
KMOD_RALT同時按下右邊的 alt 鍵
KMOD_ALT同時按下 alt 鍵
KMOD_LMETA同時按下左邊的元鍵
KMOD_RMETA同時按下右邊的元鍵
KMOD_META同時按下元鍵
KMOD_NUM同時按下數字鍵盤鎖定鍵
KMOD_MODE同時按下模式轉換鍵

溫馨提示:如果 mod & KMOD_CTRL 是真的話,表示用戶同時按下了 Ctrl 鍵。

函數詳解pygame.key.get_focused()當窗口獲得鍵盤的輸入焦點時返回 True。

get_focused() -> bool

當窗口獲得鍵盤的輸入焦點時返回 True,如果窗口需要確保不失去鍵盤焦點,可以使用 pygame.event.set_grab(True) 獨佔所有的輸入接口。

溫馨提示:注意,這樣做你就無法將鼠標移出窗口客戶區了,但你仍然可以通過 Ctrl - Alt - Delete 熱鍵“解圍”。

pygame.key.get_pressed()獲取鍵盤上所有按鍵的狀態。

get_pressed() -> bools

返回一個由布爾類型值組成的序列,表示鍵盤上所有按鍵的當前狀態。使用 key 常量作爲索引,如果該元素是 True,表示該按鍵被按下。

使用該函數獲取一系列按鈕被按下的狀態,並不能正確的獲取用戶輸入的文本。因爲你無法知道用戶按鍵的被按下的順序,並且快速的連續按下鍵盤可能無法完全被捕獲(在兩次調用 pygame.key.get_pressed() 的過程中被忽略),也無法將這些按下的按鍵完全轉化爲字符值。實現此功能可以通過捕獲 pygame.KEYDOWN 事件消息來實現。

pygame.key.get_mods()檢測是否有組合鍵被按下。

get_mods() -> int

返回一個包含所有組合鍵位掩碼的整數。使用位操作符 & 你可以檢測某個組合鍵是否被按下。

溫馨提示:假如 pygame.key.get_mods() 返回值存放在 mods 變量中,如果 mods & KMOD_CTRL 爲 True,表示 ctrl 鍵正被按下。

pygame.key.set_mods() 臨時設置某些組合鍵爲被按下狀態。

set_mods(int) -> None

創建一個位掩碼整數,包含你需要設置爲被按下狀態的組合鍵。

溫馨提示:比如我們需要設置 ctrl 和 alt 組合鍵爲按下狀態,則可以 mods = KMOD_CTRL | KMOD_ALT,然後調用 pygame.key.set_mods(mods),這樣儘管用戶沒有按下 ctrl 和 alt 組合鍵,它們依然是顯示被按下狀態。

pygame.key.set_repeat()控制重複響應持續按下按鍵的時間。

set_repeat() -> None

set_repeat(delay, interval) -> None

當開啓重複響應按鍵,那麼用戶持續按下某一按鍵,就會不斷產生同一 pygame.KEYDOWN 事件。delay 參數設置多久後(單位是毫秒)開始發送第一個 pygame.KEYDOWN 事件。interval 參數設置發送兩個事件之間的間隔。如果不傳入任何參數,表示取消重複響應按鍵。

pygame.key.get_repeat()獲取重複響應按鍵的參數。

get_repeat() -> (delay, interval)

當開啓重複響應按鍵,那麼用戶持續按下某一按鍵,就會不斷產生同一 pygame.KEYDOWN 事件。返回值是一個二元組,第一個元素 delay 表示多久後(單位是毫秒)開始發送第一個 pygame.KEYDOWN 事件。第二個元素 interval 表示發送兩個事件之間的間隔。

默認情況下重複響應按鍵是沒有開啓的。

Pygame 1.8 新增加的。

pygame.key.name()獲取按鍵標識符對應的名字。

name(key) -> string

獲取一個按鍵標識符對應的字符串描述

8.locals模塊

pygame.localsPygame 定義的常量。

這個模塊包含了 Pygame 定義的各種常量。它的內容會被自動放入到 Pygame 模塊的名字空間中。你可以使用

from pygame.locals import將所有的 Pygame 常量導入。

各個常量的詳細描述記錄在 Pygame 各個模塊的相關文檔中。比如 pygame.display.set_mode() 方法用到的 HWSURFACE 常量,你就可以在 display 模塊的文檔中找到詳細的說明;事件類型在 event 模塊的文檔中可以找到;當產生 KEYDOWN 或 KEYUP 事件時,key 屬性描述具體哪個按鍵被按下,該值是以 K_ 開頭的常量(MOD_ 開頭的常量表示各種組合鍵被按下),在 key 模塊的文檔中可以找到;最後,TIME_RESOLUTION 被定義在 time 模塊中。

9.mixer模塊

pygame.mixer用於加載和播放聲音的pygame模塊

函數

  • pygame.mixer.init  —  初始化混音器模塊

  • pygame.mixer.pre_init  —  預設混音器初始化參數

  • pygame.mixer.quit  —  卸載混音器模塊

  • pygame.mixer.get_init  —  測試混音器是否初始化

  • pygame.mixer.stop  —  停止播放所有通道

  • pygame.mixer.pause  —  暫停播放所有通道

  • pygame.mixer.unpause  —  恢復播放

  • pygame.mixer.fadeout  —  淡出停止

  • pygame.mixer.set_num_channels  —  設置播放頻道的總數

  • pygame.mixer.get_num_channels  —  獲取播放頻道的總數

  • pygame.mixer.set_reserved  —  預留頻道自動使用

  • pygame.mixer.find_channel   —  找到一個未使用的頻道

  • pygame.mixer.get_busy  —  測試混音器是否正在使用類

  • pygame.mixer.Sound   —  從文件或緩衝區對象創建新的Sound對象

  • pygame.mixer.Channel   —  創建一個Channel對象來控制播放

此模塊包含用於加載 Sound 對象和控制播放的類。混音器模塊是可選的,取決於SDL_mixer。您的程序應該在使用它之前 測試 pygame.mixer 模塊是否可用並進行初始化。

混音器模塊具有有限數量的聲音播放聲道。通常程序會告訴 pygame 開始播放音頻,它會自動選擇一個可用的頻道。默認爲8個併發通道,但複雜的程序可以更精確地控制通道數量及其使用。

所有聲音播放都混合在後臺線程中。當您開始播放Sound對象時,它會在聲音繼續播放時立即返回。單個Sound對象也可以自動播放多次。

混音器還有一個特殊流通道用於音樂播放,可通過 pygame.mixer.music 模塊訪問。

混音器模塊必須像其他 pygame 模塊一樣進行初始化,但它有一些額外的條件。pygame.mixer.init() 函數採用幾個可選參數來控制播放速率和樣本大小。Pygame將 默認爲合理的值,但pygame無法執行聲音重採樣,因此應初始化混音器以匹配音頻資源的值。

注意:不要使用較少的延遲聲音,請使用較小的緩衝區大小。 默認設置爲減少某些計算機上發出沙啞聲音的可能性。 您可以在 pygame.mixer.init() 或者 pygame.init() 之前 通過調用pygame.mixer.pre_init()預設混合器初始化參數來更改默認緩衝區。 例如:pygame.mixer.pre_init(44100,-16,2,1024)。在pygame 1.8中,默認大小從1024更改爲3072。

函數詳解pygame.mixer.init() 初始化混音器模塊 init(frequency=22050, size=-16, channels=2, buffer=4096) -> None 初始化混音器模塊以進行聲音加載和播放。默認參數可以被改變以提供特定的音頻混合。允許使用關鍵字參數。對於參數設置爲零的向後兼容性,使用默認值(可能由pre_init調用更改)。

size參數表示每個音頻樣本使用的位數。如果值爲負,則將使用帶符號的樣本值。正值表示將使用不帶符號的音頻樣本。無效值會引發異常。

pygame 2中的新功能(使用SDL2編譯時) - 大小可以是32(32位浮點數)。

channels參數用於指定是使用單聲道還是立體聲。1表示單聲道,2表示立體聲。不支持其他值(負值被視爲1,大於2的值被視爲2)。

buffer參數控制混音器中使用的內部採樣數。默認值應適用於大多數情況。可以降低它以減少延遲,但可能會發生聲音丟失。它可以被提升到更大的值,以確保播放永遠不會跳過,但它會對聲音播放施加延遲。緩衝區大小必須是2的冪(如果不是,則向上舍入到下一個最接近的2的冪)。

某些平臺需要在 display 模塊初始化後初始化pygame.mixer 模塊。頂級pygame.init() 自動處理此問題,但無法將任何參數傳遞給 mixer init。爲了解決這個問題,mixer 具有pygame.mixer.pre_init() 函數在使用頂層初始化之前設置正確默認值。

多次調用是安全的,但是在初始化混音器後,如果沒有先調用 pygame.mixer.quit(),則無法更改播放參數 。

pygame.mixer.pre_init(預設混音器初始化參數

pre_init(frequency=22050, size=-16, channels=2, buffersize=4096) -> None

調用 pre_init 可以更改調用 真正的初始化 pygame.mixer.init() 使用的默認值。允許使用關鍵字參數。設置自定義混音器播放值的最佳方法是 在調用頂級 pygame.init() 之前調用 pygame.mixer.pre_init()。對於向後兼容性參數,零值將替換爲啓動默認值。

pygame.mixer.quit()退出混音器

quit() -> None

這將卸載 pygame.mixer,如果稍候重新初始化,則所有播放將停止並且任何加載的Sound對象可能與混音器不兼容。

pygame.mixer.get_init()測試混音器是否初始化

get_init() -> (frequency, format, channels)

如果混合器已初始化,則返回正在使用的播放參數。如果混音器尚未初始化,則返回None

pygame.mixer.stop()停止播放所有聲道

stop() -> None

這將停止所有活動混音器通道的播放。

pygame.mixer.pause()暫時停止播放所有聲道

pause() -> None

這將暫時停止活動混音器通道上的所有播放。稍後可以 通過 pygame.mixer.unpause() 恢復播放

pygame.mixer.unpause()恢復播放聲道

unpause() -> None

這將在暫停後恢復所有活動聲道。

pygame.mixer.fadeout()停止前淡出所有聲音的音量

fadeout(time) -> None

這將在設定時間上淡出所有活動通道上的音量,時間以毫秒爲單位。聲音靜音後,播放將停止。

pygame.mixer.set_num_channels()設置播放頻道的總數

set_num_channels(count) -> None

設置調音臺的可用頻道數。默認值爲8。可以增加或減少該值。如果該值減小,則截斷的通道上播放的聲音將停止。

pygame.mixer.get_num_channels()獲取播放頻道的總數

get_num_channels() -> count

返回當前活動的播放通道數。

pygame.mixer.set_reserved()預留頻道自動使用

set_reserved(count) -> None

調音臺可以保留任意數量的通道,這些通道不會被聲音自動選擇播放。如果聲音當前正在預留頻道播放,則不會停止。

這允許應用程序爲重要聲音保留特定數量的聲道,這些聲音不得被丟棄或具有可保證的頻道。

pygame.mixer.find_channel()找到一個未使用的頻道

find_channel(force=False) -> Channel

這將找到並返回一個非活動的Channel對象。如果沒有非活動通道,則此函數將返回None。如果沒有非活動通道且force參數爲True,則會找到運行時間最長的聲道並返回它。

如果調音臺有 pygame.mixer.set_reserved() 保留頻道,則此處不會返回這些頻道。

pygame.mixer.get_busy()測試mixer 是否正忙

get_busy() -> bool

如果混音器正忙,則返回True。如果混音器處於空閒狀態,則返回False。

類 pygame.mixer.Sound 從文件或緩衝區對象創建新的Sound對象

Sound(filename) -> Sound Sound(file=filename) -> Sound Sound(buffer) -> Sound Sound(buffer=buffer) -> Sound Sound(object) -> Sound Sound(file=object) -> Sound Sound(array=object) -> Sound

  • pygame.mixer.Sound.play        -        開始播放聲音

  • pygame.mixer.Sound.stop        -        停止聲音播放

  • pygame.mixer.Sound.fadeout        -        淡出後停止聲音播放

  • pygame.mixer.Sound.set_volume        -        設置此聲音的播放音量

    • pygame.mixer.Sound.get_volume        -        獲取播放音量

  • pygame.mixer.Sound.get_num_channels        -        計算此聲音播放的次數

  • pygame.mixer.Sound.get_length        -        得到聲音的長度

  • pygame.mixer.Sound.get_raw        -        返回Sound樣本的bytestring副本。從文件名,python文件對象或可讀緩衝區對象加載新的聲音緩衝區。將執行有限的重新採樣以幫助樣本匹配混音器的初始化參數。Unicode字符串只能是文件路徑名。Python 2.x字符串或Python 3.x字節對象可以是路徑名或緩衝區對象。使用'file'或'buffer'關鍵字來避免歧義; 否則Sound可能會猜錯。如果使用了array關鍵字,則該對象應該導出版本3,C級別數組接口,或者對於Python 2.6或更高版本,導出新的緩衝區接口(首先檢查該對象的緩衝區接口。)

Sound對象表示實際的聲音樣本數據。更改Sound對象狀態的方法將是Sound播放的所有實例。Sound對象還導出數組接口,對於Python 2.6或更高版本,還會導出新的緩衝區接口。

可以從OGG音頻文件或未壓縮的 WAV 文件加載聲音。

注意:緩衝區將在內部複製,不會在它與Sound對象之間共享數據。

目前緩衝區和數組支持與sndarray.make_sound 數值數組一致,因爲忽略了樣本符號和字節順序。這將通過正確處理符號和字節順序或在不同時引發異常來改變。此外,截斷源樣本以適合音頻樣本大小。這不會改變。

pygame.mixer.Sound(buffer)是pygame 1.8中新增的pygame.mixer.Sound關鍵字參數和數組接口支持pygame 1.9.2中的新功能。

play()開始播放聲音

play(loops=0, maxtime=0, fade_ms=0) -> Channel

在可用頻道上開始播放聲音(即,在計算機的揚聲器上)。 這將強制選擇一個頻道,因此如有必要,播放可能會切斷當前正在播放的聲音。

loops參數控制第一次播放後樣本重複的次數。值 5 表示聲音將播放一次,然後重複播放五次,因此共播放六次。默認值(0)表示聲音不重複,因此只播放一次。如果循環設置爲-1,則Sound將無限循環(但是您仍然可以調用stop()來停止它)。

maxtime參數可用於在給定的毫秒數後停止播放。

fade_ms參數將使聲音以0音量開始播放,並在給定時間內逐漸升至全音量。樣本可以在淡入完成之前結束。

這將返回所選通道的Channel對象。

stop()停止聲音播放

stop() -> None

這將停止在任何活動頻道上播放此聲音。

fadeout()淡出後停止聲音播放

fadeout(time) -> None

這將在以毫秒爲單位在時間參數上淡出後停止播放聲音。Sound會在所有播放的頻道上消失並停止。

set_volume()設置此聲音的播放音量

set_volume(value) -> None

這將設置此聲音的播放音量(響度)。如果正在播放,這將立即影響聲音。它也會影響此聲音的任何未來播放。參數是從0.0到1.0的值。

get_volume()獲取播放音量

get_volume() -> value

返回0.0到1.0之間的值,表示此Sound的音量。

get_num_channels()計算此聲音播放的次數

get_num_channels() -> count

返回此聲音正在播放的活動頻道數。

get_length()得到聲音的長度

get_length() -> seconds

以秒爲單位返回此聲音的長度。

get_raw()返回Sound樣本的bytestring副本。

get_raw() -> bytes

將Sound對象緩衝區的副本作爲字節(對於Python 3.x)或str(對於Python 2.x)對象返回。

pygame 1.9.2中的新功能。

pygame.mixer.Channel創建一個Channel對象來控制播放

Channel(id) -> Channel

  • pygame.mixer.Channel.play        -        在特定頻道播放聲音

  • pygame.mixer.Channel.stop        -        停止在頻道上播放

  • pygame.mixer.Channel.pause        -        暫時停止播放頻道

  • pygame.mixer.Channel.unpause        -        恢復暫停播放頻道

  • pygame.mixer.Channel.fadeout        -        淡出通道後停止播放

  • pygame.mixer.Channel.set_volume        -        設置播放頻道的音量

  • pygame.mixer.Channel.get_volume        -        獲得播放頻道的音量

  • pygame.mixer.Channel.get_busy        -        檢查通道是否處於活動狀態

  • pygame.mixer.Channel.get_sound        -        得到當前播放的聲音

  • pygame.mixer.Channel.queue        -        排隊Sound對象以跟隨當前

  • pygame.mixer.Channel.get_queue        -        返回排隊的任何聲音

  • pygame.mixer.Channel.set_endevent        -        播放停止時讓頻道發送事件

  • pygame.mixer.Channel.get_endevent        -        獲取播放停止時頻道發送的事件

返回其中一個當前通道的Channel對象。id必須是從0到 值pygame.mixer.get_num_channels() 的值。

Channel對象可用於精確控制Sounds的播放。一個頻道只能播放一個聲音。使用頻道完全是可選的,因爲pygame默認可以管理它們。

play()在特定頻道上播放聲音

play(Sound, loops=0, maxtime=0, fade_ms=0) -> None

這將開始播放特定頻道上的聲音。 如果頻道正在播放任何其他聲音,它將被停止。

loops參數與Sound.play()中的含義相同:它是第一次重複聲音的次數。 如果是3,聲音將播放4次(第一次,然後是三次)。 如果循環爲-1,則播放將無限重複。

與Sound.play()一樣,maxtime參數可用於在給定的毫秒數後停止播放聲音。

與Sound.play()一樣,fade_ms參數可以在聲音中淡入淡出。

stop()停止在頻道上播放聲音

stop() -> None

停止在頻道上播放聲音。播放停止後,頻道可用於播放新的聲音。

pause()暫時停止播放頻道

pause() -> None

暫時停止在頻道上播放聲音。它可以在之後調用 Channel.unpause() 恢復

unpause()恢復暫停播放頻道

unpause() -> None

在暫停的頻道上恢復播放。

fadeout()淡出通道後停止播放

fadeout(time) -> None

在給定時間參數上淡出聲音後,以毫秒爲單位停止播放通道。

set_volume()設置播放頻道的音量

set_volume(value) -> None

set_volume(left, right) -> None

設定播放聲音的音量(響度)。當頻道開始播放時,其音量值將被重置。這隻會影響當前的聲音。value參數介於0.0和1.0之間。

如果傳遞一個參數,則它將是兩個發言者的音量。如果傳遞兩個參數並且混音器處於立體聲模式,則第一個參數將是左揚聲器的音量,第二個參數將是右揚聲器的音量。(如果第二個參數爲None,則第一個參數將是兩個揚聲器的音量。)

如果頻道正在播放set_volume()已調用的聲音,則會同時考慮這兩個呼叫。例如:

sound = pygame.mixer.Sound("s.wav") channel = s.play()      # Sound plays at full volume by default sound.set_volume(0.9)   # Now plays at 90% of full volume. sound.set_volume(0.6)   # Now plays at 60% (previous value replaced). channel.set_volume(0.5) # Now plays at 30% (0.6 * 0.5).

get_volume()獲得播放頻道的音量

get_volume() -> value

返回當前播放聲音的通道音量。這沒有考慮到使用的立體聲分離 Channel.set_volume()。Sound對象也有自己的音量,與音頻混合。

get_busy()檢查通道是否處於活動狀態

get_busy() -> bool

如果通道正在主動混合聲音,則返回true。如果通道空閒,則返回False。

get_sound()得到當前播放的聲音

get_sound() -> Sound

返回當前在此頻道上播放的實際Sound對象。如果通道空閒,則返回None。

queue()排隊Sound對象以跟隨當前

queue(Sound) -> None

當聲音在頻道上排隊時,它將在當前聲音結束後立即開始播放。每個通道一次只能排隊一個聲音。排隊的聲音僅在當前播放自動結束時播放。在對Channel.stop()或的任何其他呼叫中清除它 Channel.play()。

如果在頻道上沒有主動播放聲音,則聲音將立即開始播放。

get_queue()返回排隊的任何聲音

get_queue() -> Sound

如果聲音已在此頻道上排隊,則會返回該聲音。一旦排隊的聲音開始播放,它將不再在隊列中。

set_endevent()播放停止時讓頻道發送事件

set_endevent() -> None

set_endevent(type) -> None

當爲某個頻道設置了一個嘗試時,每當一個聲音在該頻道上播放時(不僅僅是第一次),它就會向一個遊戲隊列發送一個事件。使用pygame.event.get()一旦它發送到檢索ENDEVENT。

請注意,如果您調用Sound.play(n)或Channel.play(sound,n),結束事件僅發送一次:聲音播放“n + 1”次後(請參閱Sound.play文檔)。

如果在聲音仍然播放時調用Channel.stop()或Channel.play()調用,則會立即發佈事件。

type參數將是發送到隊列的事件id。這可以是任何有效的事件類型,但一個好的選擇是pygame.locals.USEREVENT和之間的值 pygame.locals.NUMEVENTS。如果沒有給出類型參數,那麼Channel將停止發送事件。

get_endevent()獲取播放停止時頻道發送的事件

get_endevent() -> type

返回每次Channel完成聲音播放時要發送的事件類型。如果沒有功能返回該功能 pygame.NOEVENT。

10.mouse模塊

pygame.mousePygame 中與鼠標工作相關的模塊。

函數

  • pygame.mouse.get_pressed()  ——  獲取鼠標按鍵的情況(是否被按下)

  • pygame.mouse.get_pos()  ——  獲取鼠標光標的位置

  • pygame.mouse.get_rel()  ——  獲取鼠標一系列的活動

  • pygame.mouse.set_pos()  ——  設置鼠標光標的位置

  • pygame.mouse.set_visible()  ——  隱藏或顯示鼠標光標

  • pygame.mouse.get_focused()  ——  檢查程序界面是否獲得鼠標焦點

  • pygame.mouse.set_cursor()  ——  設置鼠標光標在程序內的顯示圖像

  • pygame.mouse.get_cursor()  ——  獲取鼠標光標在程序內的顯示圖像

這些函數可以用於獲取目前鼠標設備的情況,也可以改變鼠標在程序內的顯示光標。

當設置顯示模式之後,事件隊列將開始接收鼠標事件。當鼠標按鍵被按下時會產生 pygame.MOUSEBUTTONDOWN 事件,當鼠標按鍵被鬆開時會產生 pygame.MOUSEBUTTONUP 事件。這些事件包含了一個按鍵屬性,用於表示具體由哪個按鍵所觸發。

當鼠標滑輪被滾動時也會產生 pygame.MOUSEBUTTONDOWN 和 pygame.MOUSEBUTTONUP 事件。當鼠標滑輪往上滾動時,按鍵將會被設置成4;當鼠標滑輪向下滾動時,按鍵會被設置成 5。

任何時候鼠標移動都會產生一個 pygame.MOUSEMOTION 事件。鼠標的活動被拆分成小而精確的事件。當鼠標運動時,大量的運動事件會被放入相應的隊列中等待處理。沒有及時清除掉一些運動事件是隊列被塞滿的主要原因。

如果鼠標光標被隱藏並且輸入被當前顯示器佔用,鼠標會進入虛擬輸入模式,在此模式內,鼠標的相關活動不會因爲屏幕的邊界限制而停止。調用 pygame.mouse.set_visible() 方法和 pygame.event.set_grab()  方法進行設置。

函數詳解pygame.mouse.get_pressed()獲取鼠標按鍵的情況(是否被按下)。

get_pressed() -> (button1, button2, button3)

返回一個由布爾值組成的列表,代表所有鼠標按鍵被按下的情況。True 意味着在調用此方法時該鼠標按鍵正被按下。

注意1:獲取所有的鼠標事件最好是使用 pygame.event.wait() 方法或者 pygame.event.get() 方法,然後檢查確認所有事件是 MOUSEBUTTONDOWN、MOUSEBUTTONUP 或者 MOUSEMOTION。

注意2:在 X11 上一些 XServers 使用中間按鍵仿真機制。當你同時點擊按鍵 1 和 3 時會發出一個按鍵 2 被按下的事件。

注意3:在使用此方法前記住要先調用 pygame.event.get() 方法,否則此方法將不會工作。

pygame.mouse.get_pos() 獲取鼠標光標的位置。

get_pos() -> (x, y)

返回鼠標光標的座標 (x, y)。這個座標以窗口左上角爲基準點。光標位置可以被定位於窗口之外,但是通常被強制性限制在屏幕內。

pygame.mouse.get_rel()獲取鼠標一系列的活動。

get_rel() -> (x, y)

返回在調用此方法之前的一系列活動座標 (x, y)。鼠標光標的相關活動被限制在屏幕範圍內,但是通過虛擬輸入模式可以突破這個限制。此頁面的頂部有虛擬輸入模式的描述。

pygame.mouse.set_pos()設置鼠標光標的位置。

set_pos([x, y]) -> None

通過提供相應的參數來設置當前鼠標的位置。如果鼠標光標是可視的,則光標將會跳到新的座標上。移動鼠標將會產生一個新的 pygame.MOUSEMOTION 事件。

pygame.mouse.set_visible()隱藏或顯示鼠標光標。

set_visible(bool) -> bool

如果返回的布爾值爲 True,鼠標光標將會是可視的。返回光標在調用該方法之前的可視化情況。

pygame.mouse.get_focused()檢查程序界面是否獲得鼠標焦點。

get_focused() -> bool

當 pygame 正在接受鼠標輸入事件(或者用專業術語說,鼠標正在處於“active”或“focus”狀態)返回值爲 True。

一般情況下此方法用於窗口模式。在全屏模式下,該方法總會返回 True。

注意:在 MS Windows 系統中,一個窗口可以同時對鼠標和鍵盤事件保持監聽。但是在 X-Windows 系統中,需要用一個窗口監聽鼠標事件而另一個窗口監聽鍵盤事件。pygame.mouse.get_focused() 可以表示 pygame 窗口是否在接收鼠標事件。

pygame.mouse.set_cursor()設置鼠標光標在程序內的顯示圖像。

set_cursor(size, hotspot, xormasks, andmasks) -> None

當鼠標光標是可視的時,它將通過我們提供的位掩碼數組顯示爲一個黑白色的位圖。size 指定光標的寬度和高度。hotspot 指定光標的熱點位置。xormasks 指定一組字節,用於進行按位異或掩碼的計算。andmasks 指定一組字節,用於進行按位與掩碼的計算。

光標的寬度必須是 8 的倍數,並且提供的位掩碼數組必須與寬度、高度匹配。否則將拋出異常。

關於如何創建一個系統光標,請查看 pygame.cursor 模塊。

pygame.mouse.get_cursor()獲取鼠標光標在程序內的顯示圖像。

get_cursor() -> (size, hotspot, xormasks, andmasks)

11.Rect對象

class pygame.RectRect 是用於存儲矩形座標的 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 = 10 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 對象的寬高比調整得來。

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 對象不是哈希值,所以不能作爲字典的鍵存在,因此比較的只有值

13.time模塊

pygame.timePygame 中用於監控時間的模塊。

函數

  • pygame.time.get_ticks()  ——  獲取以毫秒爲單位的時間

  • pygame.time.wait()  ——  暫停程序一段時間

  • pygame.time.delay()  ——  暫停程序一段時間

  • pygame.time.set_timer()  ——  在事件隊列上重複創建一個事件

  • pygame.time.Clock()  ——  創建一個對象來幫助跟蹤時間

  • Pygame中的時間以毫秒(1/1000秒)表示。大多數平臺的時間分辨率有限,大約爲10毫秒。該分辨率(以毫秒爲單位) 以常量 TIMER_RESLUTION 給出。

函數詳解pygame.time.get_ticks()獲取以毫秒爲單位的時間

get_ticks() -> milliseconds

返回自 pygame_init() 調用以來的毫秒數。在pygame初始化之前,這將始終爲0。

**pygame.time.wait() ** 暫停程序一段時間

wait(milliseconds) -> time

將暫停一段給定的毫秒數。此函數會暫停進程以與其他程序共享處理器。等待幾毫秒的程序將消耗非常少的處理器時間。它比pygame.time.delay() 函數稍微準確一些。

這將返回實際使用的毫秒數。

**pygame.time.delay() ** 暫停程序一段時間

delay(milliseconds) -> time

將暫停一段給定的毫秒數。此功能將使用處理器(而不是休眠),使用 pygame.time.wait() 以使延遲更準確。

這將返回實際使用的毫秒數。

**pygame.time.set_timer() ** 在事件隊列上重複創建一個事件

set_timer(eventid, milliseconds) -> None

將事件類型設置爲每隔給定的毫秒數顯示在事件隊列中。第一個事件將在經過一段時間後纔會出現。

每種事件類型都可以附加一個單獨的計時器。在 pygame.USEREVENT 和 pygame.NUMEVENTS 中使用該值更好。

要禁用事件的計時器,請將milliseconds參數設置爲0。

**pygame.time.Clock() ** 創建一個對象來幫助跟蹤時間

Clock() -> Clock

  • pygame.time.Clock.tick()  ——  更新時鐘

  • pygame.time.Clock.tick_busy_loop()  ——  更新時鐘

  • pygame.time.Clock.get_time()  ——  在上一個tick中使用的時間

  • pygame.time.Clock.get_rawtime()  ——  在上一個tick中使用的實際時間

  • pygame.time.Clock.get_fps()  ——  計算時鐘幀率 創建一個新的Clock對象,可用於跟蹤一段時間。時鐘還提供了幾個功能來幫助控制遊戲的幀速率。

tick()更新時鐘

tick(framerate=0) -> milliseconds

注:

應該每幀調用一次此方法。它將計算自上一次調用以來經過的毫秒數。

如果傳遞可選的幀率參數,該函數將延遲以使遊戲運行速度低於每秒給定的滴答數。這可以用於幫助限制遊戲的運行時速度。通過每幀調用 一次 Clock.tick(40),程序將永遠不會超過每秒40幀。

請注意,此函數使用SDL_Delay函數,該函數在每個平臺上都不準確,但不會佔用太多CPU。如果你想要一個準確的計時器,請使用tick_busy_loop,並且不介意咀嚼CPU。

tick_busy_loop()更新時鐘

tick_busy_loop(framerate=0) -> milliseconds

注:

應該每幀調用一次此方法。它將計算自上一次調用以來經過的毫秒數。

如果您傳遞可選的幀率參數,該函數將延遲以使遊戲運行速度低於每秒給定的滴答數。這可以用於幫助限制遊戲的運行時速度。通過每幀調用 一次 Clock.tick_busy_ioop(40),程序將永遠不會超過每秒40幀。

請注意,此函數使用 pygame.time.delay(,在繁忙的循環中使用大量CPU以確保時間更準確。

pygame 1.8.0中的新功能。

get_time()  在上一個tick中使用的時間

get_time() -> milliseconds

前兩次調用 Clock.tick() 之間傳遞的毫秒數。

get_rawtime()  在上一個tick中使用的實際時間

get_rawtime() -> milliseconds

類似於 Clock.get_time(),但不包括  Clock.tick() 延遲限制幀速率時使用的任何時間。

get_fps()

計算時鐘幀率

get_fps() -> float

計算遊戲的幀速率(以每秒幀數爲單位)。它是通過平均最後十次調用來計算的  Clock.tick() 。

14.music模塊

pygame.mixer.music Pygame 中控制音頻流的模塊。

函數

  • pygame.mixer.music.load()  ——  載入一個音樂文件用於播放

  • pygame.mixer.music.play()  ——  開始播放音樂流

  • pygame.mixer.music.rewind()  ——  重新開始播放音樂

  • pygame.mixer.music.stop()  ——  結束音樂播放

  • pygame.mixer.music.pause()  ——  暫停音樂播放

  • pygame.mixer.music.unpause()  ——  恢復音樂播放

  • pygame.mixer.music.fadeout()  ——  淡出的效果結束音樂播放

  • pygame.mixer.music.set_volume()  ——  設置音量

  • pygame.mixer.music.get_volume()  ——  獲取音量

  • pygame.mixer.music.get_busy()  ——  檢查是否正在播放音樂

  • pygame.mixer.music.set_pos()  ——  設置播放的位置

  • pygame.mixer.music.get_pos()  ——  獲取播放的位置

  • pygame.mixer.music.queue()  ——  將一個音樂文件放入隊列中,並排在當前播放的音樂之後

  • pygame.mixer.music.set_endevent()  ——  當播放結束時發出一個事件

  • pygame.mixer.music.get_endevent()  ——  獲取播放結束時發送的事件

Pygame 中播放音樂的模塊和 pygame.mixer 模塊是密切聯繫的。使用音樂模塊去控制在調音器上的音樂播放。

音樂(music)播放和聲音(sound)播放的不同之處在於音樂是流式的,並且絕對不會在一開始就把一個音樂文件全部載入。調音系統在工作剛開始時僅支持單音樂流。

注意:對於 MP3 格式的支持是受限制的。在一些系統上,一種不受支持的格式將會是系統崩潰,例如 Debian Linux。爲了遊戲的穩定性,建議使用 OGG 進行替代。

函數詳解pygame.mixer.music.load()載入一個音樂文件用於播放。

load(filename) -> None

load(object) -> None

該函數將會載入一個音樂文件名或者文件對象,並且準備播放。如果已經有音樂流正在播放,該音樂流將被停止。另外,函數不會開始播放音樂。

pygame.mixer.music.play()開始播放音樂流。

play(loops=0, start=0.0) -> None

該函數用於播放已載入的音樂流。如果音樂已經開始播放,則將會重新開始播放。

loops 參數控制重複播放的次數,例如 play(5) 意味着被載入的音樂將會立即開始播放 1 次並且再重複 5 次,共 6 次。如果 loops = -1,則表示無限重複播放。

start 參數控制音樂從哪裏開始播放。開始的位置取決於音樂的格式。MP3 和 OGG 使用時間表示播放位置(以秒爲單位)。MOD使用模式順序編號表示播放位置。如果音樂文件無法設置開始位置,則傳遞了start參數後會產生一個NotImplementedError 錯誤。

pygame.mixer.music.rewind()重新開始播放音樂。

rewind() -> None

從文件開頭開始重新播放音樂。

pygame.mixer.music.stop()結束音樂播放。

stop() -> None

如果音樂正在播放則立即結束播放。

pygame.mixer.music.pause()暫停音樂流的播放。

pause() -> None

通過調用 pygame.mixer.music.unpause() 函數繼續播放音樂。

pygame.mixer.music.unpause()恢復音樂播放。

unpause() -> None

在播放暫停後使用該函數可以繼續音樂流的播放。

pygame.mixer.music.fadeout()淡出的效果結束音樂播放。

fadeout(time) -> None

該函數將會在音樂淡出(也就是不在有聲音放出)一段指定長度的時間(以毫秒爲單位)後結束播放。

注意:該函數在調用後會一直處於阻塞狀態,直到音樂已經淡出。

pygame.mixer.music.set_volume()設置音量。

set_volume(value) -> None

設置音樂的播放音量。

value 參數值範圍爲 0.0~1.0。當新的音樂文件被載入,音量會被重置。

pygame.mixer.music.get_volume()獲取音量。

get_volume() -> value

返回正在播放的音樂的音量(此音量應該是調音器音量,注意與其他音量參數區分)。返回值範圍爲 0.0~1.0。

pygame.mixer.music.get_busy()檢查是否正在播放音樂。

get_busy() -> bool

如果有音樂流正在播放,此方法返回 True。否則返回 False。

pygame.mixer.music.set_pos()設置播放的位置。

set_pos(pos) -> None

設置播放的起始位置。pos 參數是一個浮點數(或者一個可以轉換爲浮點數的數值),其值取決於音樂文件的格式:

對於 MOD 文件,它是模塊中的整型模式號;對於 OGG 文件,它是一個以音頻開頭爲零點的絕對時間值(以秒爲單位);對於 MP3 文件,它是以當前播放位置爲零點的絕對時間值(以秒爲單位)。爲了對一個 MP3 文件的進行絕對定位,建議首先調用 rewind() 函數(其他文件格式不受支持)。SDL_mixer 更新的版本提供了更好的定位支持。如果一種特殊的格式不支持定位,將會產生一個 SDLError 錯誤。

該函數會調用 SDL_mixer 內的 Mix_SetMusicPosition() 函數。

pygame.mixer.music.get_pos()獲取播放的位置。

get_pos() -> time

此函數會獲得音樂的播放時長(以毫秒爲單數的數值)。返回值僅代表已經音樂已經播放了多久,並不考慮任何起始位置偏移量。

pygame.mixer.music.queue()將一個音樂文件放入隊列中,並排在當前播放的音樂之後。

queue(filename) -> None

此函數將會載入一個音樂文件並將其放入隊列中。當前的音樂一旦播放完畢,正在排隊的音樂文件就會開始播放。如果當前音樂被人爲停止或者切換到其他音樂,則正在排隊的音樂會被丟棄。

下面的示例意思是先播放 6 次 Bach 然後再播放 1 次 Mozart:

pygame.mixer.music.load('bach.ogg')
pygame.mixer.music.play(5)        # Plays six times, not five!
pygame.mixer.music.queue('mozart.ogg')
pygame.mixer.music.set_endevent()

當播放結束時發出一個事件。

set_endevent() -> None

set_endevent(type) -> None

調用此函數會使 Pygame 在音樂結束播放後發出信號(通過事件隊列)。

type 參數決定了什麼樣的事件將被放入事件隊列中。

任何時候音樂結束,都會放入指定事件到隊列中(不僅僅是第一次)。調用該函數並不帶任何參數,表示停止投放事件到隊列中。

pygame.mixer.music.get_endevent()獲取播放結束時發送的事件。

get_endevent() -> type

返回音樂結束時被放入隊列的事件類型。

如果沒有指定 endevent 事件,此方法會返回 pygame.NOEVENT 。

15.pygame模塊

pygamePygame 最頂層的包。

函數 & 屬性

  • pygame.init()  —  初始化所有導入的 pygame 模塊

  • pygame.quit()  —  卸載所有導入的 pygame 模塊

  • pygame.error()  —  標準 pygame 異常模塊

  • pygame.get_error()  —  獲得當前錯誤信息

  • pygame.set_error()  —  設置當前錯誤信息

  • pygame.get_sdl_version()  —  獲得 SDL 的版本號

  • pygame.get_sdl_byteorder()  —  獲得 SDL 的字節順序

  • pygame.register_quit()  —  註冊一個函數,這個函數將在 pygame 退出時被調用

  • pygame.encode_string()  —  對 unicode 或字節對象編碼

  • pygame.encode_file_path()  —  將 unicode 或字節對象編碼爲文件系統路徑

  • pygame 包是可供使用的最頂層的包。Pygame 被分成許多子模塊,但是並不會影響程序使用 Pygame。

爲了方便,在 pygame 中絕大多數的頂級變量被放入名爲“pygame.locals”的模塊中。意思是說這些變量可通過以下方式導入:

import pygame from pygame.locals import * 當你導入 pygame 後,所有可用的 pygame 子模塊都將自動被導入。需要注意的是,一些 pygame 模塊是“可選的”,並且可能無法使用。以防萬一,Pygame 將提供了一個佔位符對象替代原來的模塊,這個對象可用來測試某些功能(變量)是否可用。

函數 & 屬性詳解pygame.init()初始化所有導入的 pygame 模塊。

init() -> (numpass, numfail)

初始化所有導入的 pygame 模塊,如果有模塊導入失敗也不會顯示異常,但是將返回一個元組,第一個元素爲成功導入的模塊數,第二個元素爲導入失敗的個數。

也許你想分開初始化不同的模塊,以提高你程序的運行速度,或者不加載暫時用不到的模塊。

重複調用 init() 方法是沒問題的,也不會有任何負面影響。即使你已經調用了 pygame.quit() 卸載所有模塊也是可以的。

pygame.quit()卸載所有導入的 pygame 模塊。

quit() -> None

卸載所有之前被初始化的 pygame 模塊。當 python 解釋器關閉時,這個方法將被無條件地調用,所以你的程序並不需要調用這個方法,除非你想要終止 pygame 資源,並繼續執行其他功能。多次執行這個方法也是沒有問題的。

注意:調用這個方法 pygame.quit() 會結束所有模塊,但不會結束你的程序。建議用正常結束 python 程序的方法來結束 pygame 程序。

exception pygame.error標準的 pygame 異常。

raise pygame.error(message)

當 pygame 或 SDL 操作失敗時,將會引發異常。你可以捕獲任何可預見的問題並處理異常。報告異常時,會同時顯示問題的描述信息。

它是 RuntimeError 異常的子類,用於捕獲這些異常。

pygame.get_error()得到當前錯誤信息。

get_error() -> errorstr

獲取 SDL 維護的一個內部錯誤消息。當標準 pygame.error() 標準 pygame 異常引發時,這些信息將會提供給你。

其實你很少會使用到這個方法的啦。

pygame.set_error()設置當前錯誤信息。

set_error(error_msg) -> None

設置 SDL 維護的一個內部錯誤消息。當標準 pygame.error() 標準 pygame 異常引發時,這些信息將會提供給你。

其實你很少會使用到這個方法的啦。

pygame.get_sdl_version()獲得 SDL 的版本號。

get_sdl_version() -> major, minor, patch

返回 SDL 庫有關版本的 3 個數字。這個版本是在編譯時生成的。這個方法可用來得知哪個元件是不能正常使用的。

Pygame 1.7.0 新添加的方法。

pygame.get_sdl_byteorder()獲得 SDL 的字節順序。

get_sdl_byteorder() -> int

獲得 SDL 庫的字節順序。返回 LIL_ENDIAN 表示小端字節順序;返回 BIG_ENDIAN 表示大端字節順序。

Pygame 1.8 新添加的方法。

pygame.register_quit()註冊一個函數,這個函數將在 pygame 退出時被調用。

register_quit(callable) -> None

當調用 pygame.quit() 結束所有模塊時,所有通過 register_quit() 方法註冊過的函數將被調用。這一切都是自動執行的。

一般的 pygame 用戶用不到這個方法。

pygame.encode_string()對 unicode 或字節對象進行編碼。

encode_string([obj [, encoding [, errors [, etype]]]]) -> bytes or None

obj:

傳入 unicode 類型 -> 編碼 傳入 bytes 類型 -> 不變 傳入其他類型 -> 返回 None 沒有傳遞 obj 參數 -> 引起 SyntaxError 異常 encoding (string):如果存在則進行編碼,默認是 unicode_escape。

errors (string):指定如何處理無法編碼的內容,默認使用反斜槓(\)代替。

etype (exception type):指定編碼錯誤引發的異常類型。默認爲 UnicodeEncodeError,由 PyUnicode_AsEncodedString() 返回。對於默認的編碼和錯誤值不應該有編碼錯誤。

這個函數被用於編碼文件路徑的時候,支持使用關鍵字參數。

Pygame 1.9.2 新增加的方法(主要用於單元測試)。

pygame.encode_file_path()將 unicode 或 bytes 對象編碼爲文件系統路徑。

encode_file_path([obj [, etype]]) -> bytes or None

obj:

  • 傳入 unicode 類型 -> 編碼

  • 傳入 bytes 類型 -> 不變

  • 傳入其他類型 -> 返回 None

  • 沒有傳遞 obj 參數 -> 引起 SyntaxError 異常 etype(異常類型):若給出,則出現異常時報相應編碼錯誤,默認爲 UnicodeEncodeError,由 PyUnicode_AsEncodedString() 返回。

這個函數被用於編碼文件路徑的時候,結果由 sys.getfilesystemencoding() 返回,支持使用關鍵字參數。

參考文檔

  • Pygame官網:https://www.pygame.org

  • Pygame的官網是有詳細的文檔的:https://www.pygame.org/docs/

  • pygame中文手冊pdf版本:https://yihang.cowtransfer.com/s/7b027011c9cd4a

——— / 往期精選 / ————


後臺回覆「進羣」可以加入我們的社羣哦~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章