Python游戏工具包---Pygame最常用的15个模块详解(附pdf版本)
↑?點擊上方?“一行數(shù)據(jù)”?關(guān)注 + 星標(biāo)?~?
每周送書,絕不錯過
本文不查錯,三連送書
最近很多讀者想學(xué)習(xí)使用python來制作游戲,其中最經(jīng)典的工具包就是Pygame ,如果單純只看之前分享的是個游戲代碼案例,直接來制作一款游戲有些難度
python制作十款游戲案例
所以今天行哥對pygame工具包進(jìn)行了總結(jié),并分享了pygame工具包最常用15個模塊的詳細(xì)方法,如果想獲取pdf版本可見文末鏈接
1.Color類
class pygame.Color
Pygame 中用于描述顏色的對象。Color(name) -> Color Color(r, g, b, a) -> Color Color(rgbvalue) -> Color
方法 & 屬性
-
pygame.Color.r??—??獲取或設(shè)置 Color 對象的紅色值
-
pygame.Color.g??—??獲取或設(shè)置 Color 對象的綠色值
-
pygame.Color.b??—??獲取或設(shè)置 Color 對象的藍(lán)色值
-
pygame.Color.a??—??獲取或設(shè)置 Color 對象的 alpha 值
-
pygame.Color.cmy??—??獲取或設(shè)置 Color 對象表示的 CMY 值
-
pygame.Color.hsva??—??獲取或設(shè)置 Color 對象表示的 HSVA 值
-
pygame.Color.hsla??—??獲取或設(shè)置 Color 對象表示的 HSLA 值
-
pygame.Color.i1i2i3??—??獲取或設(shè)置 Color 對象表示的 I1I2I3 值
-
pygame.Color.normalize()??—??返回 Color 對象的標(biāo)準(zhǔn)化 RGBA 值
-
pygame.Color.correct_gamma()??—??應(yīng)用一定的伽馬值調(diào)整 Color 對象
-
pygame.Color.set_length()??—??設(shè)置 Color 對象的長度(成員數(shù)量)
Pygame 使用 Color 類表示 RGBA 顏色值,每個顏色值的取值范圍是 0 ~ 255。允許通過基本的算術(shù)運算創(chuàng)造新的顏色值,支持轉(zhuǎn)換為其他顏色空間,例如 HSV 或 HSL,并讓你調(diào)整單個顏色通道。當(dāng)沒有給出 alpha 的值默認(rèn)是 255(不透明)。
“RGB值”可以是一個顏色名,一個 HTML 顏色格式的字符串,一個 16 進(jìn)制數(shù)的字符串,或者一個整型像素值。HTML 格式是 "#rrggbbaa",其中 "rr","gg","bb","aa" 都是 2 位的 16 進(jìn)制數(shù)。代表 alpha 的 "aa" 是可選的。16 進(jìn)制數(shù)的字符串組成形式為 "0xrrggbbaa",當(dāng)然,其中的 "aa" 也是可選的。
2.display模塊
pygame.display
Pygame 中用于控制窗口和屏幕顯示的模塊。
注:為了適應(yīng)語境,display 在該文檔中有時翻譯為“顯示”,有時翻譯為“顯示界面”。
函數(shù)
-
pygame.display.init()??—??初始化 display 模塊
-
pygame.display.quit()??—??結(jié)束 display 模塊
-
pygame.display.get_init()??—??如果 display 模塊已經(jīng)初始化,返回 True
-
pygame.display.set_mode()??—??初始化一個準(zhǔn)備顯示的窗口或屏幕
-
pygame.display.get_surface()??—??獲取當(dāng)前顯示的 Surface 對象
-
pygame.display.flip()??—??更新整個待顯示的? Surface 對象到屏幕上
-
pygame.display.update()??—??更新部分軟件界面顯示
-
pygame.display.get_driver()??—??獲取 Pygame 顯示后端的名字
-
pygame.display.Info()??—??創(chuàng)建有關(guān)顯示界面的信息對象
-
pygame.display.get_wm_info()??—??獲取關(guān)于當(dāng)前窗口系統(tǒng)的信息
-
pygame.display.list_modes()??—??獲取全屏模式下可使用的分辨率
-
pygame.display.mode_ok()??—??為顯示模式選擇最合適的顏色深度
-
pygame.display.gl_get_attribute()??—??獲取當(dāng)前顯示界面 OpenGL 的屬性值
-
pygame.display.gl_set_attribute()??—??設(shè)置當(dāng)前顯示模式的 OpenGL 屬性值
-
pygame.display.get_active()??—??當(dāng)前顯示界面顯示在屏幕上時返回 True
-
pygame.display.iconify()??—??最小化顯示的? Surface 對象
-
pygame.display.toggle_fullscreen()??—??切換全屏模式和窗口模式
-
pygame.display.set_gamma()??—??修改硬件顯示的 gama 坡道
-
pygame.display.set_gamma_ramp()??—??自定義修改硬件顯示的 gama 坡道
-
pygame.display.set_icon()??—??修改顯示窗口的圖標(biāo)
-
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)的各種函數(shù)。Pygame 的? Surface ?對象即可顯示為一個窗口,也可以全屏模式顯示。當(dāng)你創(chuàng)建并顯示一個常規(guī)的? Surface ?對象后,在該對象上的改變并不會立刻反映到可見屏幕上,你必須選擇一個翻轉(zhuǎn)函數(shù)來顯示改動后的畫面。
顯示的原點是 (x=0, y=0) 的位置,及屏幕的左上角,坐標(biāo)軸向右下角增長。
Pygame 的 display 事實上可以有幾種初始化的方式。默認(rèn)情況下,display 作為一個軟件驅(qū)動的幀緩沖區(qū)。除此之外,你可以使用硬件加速和 OpenGL 支持的特殊模塊。這些是通過給 pygame.display.set_mode() 傳入 flags 參數(shù)來控制的。
Pygame 在任何時間內(nèi)都只允許有一個顯示界面。使用 pygame.display.set_mode() 創(chuàng)建的新顯示界面會自動替換掉舊的。如果需要精確控制像素格式或顯示分辨率,使用 pygame.display.mode_ok(),pygame.display.list_modes(),和 pygame.display.Info() 來查詢顯示界面相關(guān)的信息。
一旦? Surface ?對象的顯示界面被創(chuàng)建出來,這個模塊的函數(shù)就只影響當(dāng)前的顯示界面。如果該模塊未初始化, Surface ?對象也會變?yōu)椤胺欠ā薄H绻碌娘@示模式被設(shè)置,當(dāng)前的? Surface ?對象將會自動切換到新的顯示界面。
當(dāng)一個新的顯示模式被設(shè)置,會在 Pygame 的事件隊列中放入幾個相關(guān)事件。當(dāng)用于希望關(guān)閉程序時,pygame.QUIT 事件會被發(fā)送;當(dāng)顯示界面獲得和失去焦點時,窗口會得到 pygame.ACTIVEEVENT 事件;如果顯示界面設(shè)置了 pygame.RESIZABLE 標(biāo)志,那么當(dāng)用戶調(diào)整窗口尺寸時,pygame.VIDEORESIZE 事件會被發(fā)送;硬件顯示指當(dāng)接收到 pygame.VIDEOEXPOSE 事件時,將部分需要被重繪的窗口直接繪制到屏幕上。
一些顯示環(huán)境擁有自動拉伸所有窗口的選項。當(dāng)該選項被啟動時,自動拉伸會扭曲 Pygame 窗口的外觀。在 Pygame 的例子目錄中,有一個演示代碼(prevent_display_stretching.py)展示如何在微軟系統(tǒng)(Vista 以上系統(tǒng))中關(guān)閉 Pygame 顯示的自動拉伸屬性。
函數(shù)詳解pygame.display.init()初始化 display 模塊。
init() -> None
初始化 Pygame 的 display 模塊。在初始化之前,display 模塊無法做任何事情。但當(dāng)你調(diào)用更高級別的 pygame.init(),變會自動調(diào)用 pygame.display.init() 進(jìn)行初始化。
初始化后,Pygame 將自動從幾個內(nèi)部的顯示后端中選擇一個。顯示模式由平臺和當(dāng)前用戶權(quán)限決定。在 display 模塊被初始化之前,可以通過環(huán)境變量 SDL_VIDEODRIVER 設(shè)置哪一個顯示后端將被使用。具有多種顯示后端的系統(tǒng)如下:
Windows?:?windib,?directx
Unix?:?x11,?dga,?fbcon,?directfb,?ggi,?vgl,?svgalib,?aalib
在一些平臺上,可以將 Pygame 的 display 嵌入到已經(jīng)存在的窗口中。如果這么做,環(huán)境變量 SDL_WINDOWID 必須被設(shè)置為一個包含窗口 ID 或句柄的字符串。當(dāng) Pygame 的 display 被初始化的時候,將檢測環(huán)境變量。注意,在一個運行的窗口嵌入 display 會產(chǎn)生許多奇怪的副作用。
多次調(diào)用該函數(shù)并沒有任何問題,但也不會有什么效果。
pygame.display.quit()
結(jié)束 display 模塊。
quit() -> None
這個函數(shù)會關(guān)閉整個 display 模塊。這將意味著任何一個活躍的顯示界面都將被關(guān)閉。當(dāng)主程序退出時,該函數(shù)也會被自動調(diào)用。
多次調(diào)用該函數(shù)并沒有任何問題,但也不會有什么效果。
pygame.display.get_init()
如果 display 模塊已經(jīng)初始化,返回 True。
get_init() -> bool
如果 display 模塊已經(jīng)初始化,返回 True。
pygame.display.set_mode()初始化一個準(zhǔn)備顯示的窗口或屏幕。
set_mode(resolution=(0,0), flags=0, depth=0) -> Surface
這個函數(shù)將創(chuàng)建一個 Surface ?對象的顯示界面。傳入的參數(shù)用于指定顯示類型。最終創(chuàng)建出來的顯示界面將是最大可能地匹配當(dāng)前操作系統(tǒng)。
resolution 參數(shù)是一個二元組,表示寬和高。flags 參數(shù)是附件選項的集合。depth 參數(shù)表示使用的顏色深度。
返回的 Surface ?對象可以像常規(guī)的 Surface ?對象那樣去繪制,但發(fā)生的改變最終會顯示到屏幕上。
如果沒有傳入 resolution 參數(shù),或者使用默認(rèn)設(shè)置 (0, 0),且 Pygame 使用 SDL1.2.10 以上版本,那么創(chuàng)建出來的 Surface 對象將與當(dāng)前屏幕用戶一樣的分辨率。如果只有寬或高其中一項被設(shè)置為 0,那么 Surface 對象將使用屏幕分辨率的寬或高代替它。如果 SDL 版本低于 1.2.10,那么將拋出異常。
通常來說,最好的做法是不要傳遞 depth 參數(shù)。因為默認(rèn) Pygame 會根據(jù)當(dāng)前操作系統(tǒng)選擇最好和最快的顏色深度。如果你的游戲確實需要一個特殊的顏色格式,那么你可以通過控制 depth 參數(shù)來實現(xiàn)。Pygame 將為模擬一個非現(xiàn)成的顏色深度而耗費更多的時間。
當(dāng)使用全屏顯示模式的時候,有時候無法完全匹配到需要的分辨率。在這種情況下,Pygame 將自動選擇最匹配的分辨率使用,而返回的 Surface ?對象將保持與需求的分辨率一致。
flags 參數(shù)指定你想要的顯示類型。提供幾個選擇給你,你可以通過位操作同時使用多個類型(管道操作符 "|")。如果你傳入 0 或沒有傳入 flags 參數(shù),默認(rèn)會使用軟件驅(qū)動窗口。這兒是 flags 參數(shù)提供的幾個可選項:
| 選項 | 含義 |
|---|---|
| pygame.FULLSCREEN | 創(chuàng)建一個全屏顯示 |
| pygame.DOUBLEBUF | 1. 雙緩沖模式?2. 推薦和 HWSURFACE 或 OPENGL 一起使用 |
| pygame.HWSURFACE | 硬件加速,只有在 FULLSCREEN 下可以使用 |
| pygame.OPENGL | 創(chuàng)建一個 OPENGL 渲染的顯示 |
| pygame.RESIZABLE | 創(chuàng)建一個可調(diào)整尺寸的窗口 |
| pygame.NOFRAME | 創(chuàng)建一個沒有邊框和控制按鈕的窗口 |
舉個例子:
#?在屏幕中創(chuàng)建一個?700?*?400?的窗口
screen_width=700
screen_height=400
screen=pygame.display.set_mode([screen_width,?screen_height])
pygame.display.get_surface()獲取當(dāng)前顯示的 Surface 對象。
get_surface() -> Surface
返回當(dāng)前顯示的 Surface ?對象。如果沒有設(shè)置任何顯示模式,那么返回 None。
pygame.display.flip()更新整個待顯示的 Surface 對象到屏幕上。
flip() -> None
這個函數(shù)將更新整個顯示界面的內(nèi)容。如果你的顯示模式使用了 pygame.HWSURFACE(硬件加速)和 pygame.DOUBLEBUF(雙緩沖)標(biāo)志,那么將等待垂直會掃并切換顯示界面。如果你使用不同類型的顯示模式,那么它將簡單的更新整個顯示界面的內(nèi)容。
當(dāng)使用 pygame.OPENGL(使用 OPENGL 渲染)顯示模式時,將創(chuàng)建一個 gl 緩沖切換區(qū)。
溫馨提示:垂直回掃是與視頻顯示相關(guān)的時間測量,它代表了一個幀的結(jié)束和下一幀的開始時間之間的時間間隔。
pygame.display.update()更新部分軟件界面顯示。
update(rectangle=None) -> None
update(rectangle_list) -> None
這個函數(shù)可以看作是 pygame.display.flip() 函數(shù)在軟件界面顯示的優(yōu)化版。它允許更新屏幕的部分內(nèi)容,而不必完全更新。如果沒有傳入任何參數(shù),那么該函數(shù)就像 pygame.display.flip() 那樣更新整個界面。
你可以傳遞一個或多個矩形區(qū)域給該函數(shù)。一次性傳遞多個矩形區(qū)域比多次傳遞更有效率。如果傳入的是一個空列表或者 None,那么將忽略參數(shù)。
該函數(shù)不能在 pygame.OPENGL 顯示模式下調(diào)用,否則會拋出異常。
pygame.display.get_driver()獲取 Pygame 顯示后端的名字。
get_driver() -> name
初始化的時候,Pygame 會從多個可用的顯示后端中選擇一個。這個函數(shù)返回顯示后端內(nèi)部使用的名字。可以用來提供有關(guān)顯示性能加速的一些信息。可以參考 pygame.display.set_mode() 的 SDL_VIDEODRIVER 環(huán)境變量。
pygame.display.Info()創(chuàng)建有關(guān)顯示界面的信息對象。
Info() -> VideoInfo
創(chuàng)建一個對象,包含對當(dāng)前圖形環(huán)境一些屬性的描述。在一些平臺上,如果這個函數(shù)在 pygame.display.set_mode() 前被調(diào)用,可以提供一些關(guān)于默認(rèn)顯示模式的信息。也可以在設(shè)置完顯示模式后調(diào)用該函數(shù),以確認(rèn)顯示選項是否如愿以償。
返回的 VideoInfo 對象包含以下這些屬性:
| 屬性 | 含義 |
|---|---|
| hw | 如果是 True,則表示啟用硬件加速 |
| wm | 如果是 True,則表示顯示窗口模式 |
| video_mem | 表示顯存是多少兆字節(jié)(mb),0 表示不清楚 |
| bitsize | 表示每個像素存放多少位 |
| bytesize | 表示每個像素存放多少字節(jié) |
| masks | 4 個值用于打包像素的 RGBA 值 |
| shifts | 4 個值用于打包像素的 RGBA 值 |
| losses | 4 個值用于打包像素的 RGBA 值 |
| blit_hw | 如果是 True,則表示加速硬件驅(qū)動的?Surface??對象繪制 |
| blit_hw_CC | 如果是 True,則表示加速硬件驅(qū)動的?Surface?對象 colorkey 繪制 |
| blit_hw_A | 如果是 True,則表示加速硬件驅(qū)動的?Surface??對象 pixel alpha 繪制 |
| blit_sw | 如果是 True,則表示加速軟件驅(qū)動的?Surface?對象繪制 |
| blit_sw_CC | 如果是 True,則表示加速軟件驅(qū)動的?Surface?對象 colorkey 繪制 |
| blit_sw_A | 如果是 True,則表示加速軟件驅(qū)動的Surface?對象 pixel alpha 繪制 |
| current_w, current_h | 1. 表示當(dāng)前顯示模式的寬和高(如果在 display.set_mode() 前被調(diào)用,則表示當(dāng)前桌面的寬和高)2. current_w, current_h 在 Pygame 1.8.0 以后,SDL 1.2.10 以后才支持3. -1 表示錯誤,或者 SDL 版本太舊 |
pygame.display.get_wm_info()獲取關(guān)于當(dāng)前窗口系統(tǒng)的信息。
get_wm_info() -> dict
創(chuàng)建一個由操作系統(tǒng)填充數(shù)據(jù)的字典。一些操作系統(tǒng)可能不會往里邊填充信息,則返回一個空字典。大多數(shù)平臺將返回一個 "window" 鍵,對應(yīng)的值是當(dāng)前顯示界面的系統(tǒng) ID。
Pygame 1.7.1 新增加的。
pygame.display.list_modes() 獲取全屏模式下可使用的分辨率。
list_modes(depth=0, flags=pygame.FULLSCREEN) -> list
這個函數(shù)返回一個列表,包含指定顏色深度所支持的所有分辨率。如果顯示模式非全屏,則返回一個空列表。如果返回 -1 表示支持任何分辨率(類似于窗口模式)。返回的列表由大到小排列。
如果顏色深度是 0,SDL 將選擇當(dāng)前/最合適的顏色深度顯示。flags 參數(shù)默認(rèn)值是 pygame.FULLSCREEN,但你可能需要添加額外的全屏模式標(biāo)志。
pygame.display.mode_ok()為顯示模式選擇最合適的顏色深度。
mode_ok(size, flags=0, depth=0) -> depth
這個函數(shù)使用與 pygame.display.set_mode() 函數(shù)一樣的參數(shù)。一般用于判斷一個顯示模式是否可用。如果顯示模式無法設(shè)置,則返回 0。正常情況下將會返回顯示需求的像素深度。
通常不用理會 depth 參數(shù),除非一些支持多個顯示深度的平臺,它會提示哪個顏色深度是更合適的。
最有用的 flags 參數(shù)是 pygame.HWSURFACE,pygame.DOUBLEBUF 和 pygame.FULLSCREEN。如果這些標(biāo)志不支持,那么該函數(shù)會返回 0。
pygame.display.gl_get_attribute()獲取當(dāng)前顯示界面 OpenGL 的屬性值。
gl_get_attribute(flag) -> value
在調(diào)用設(shè)置了 pygame.OPENGL 標(biāo)志的 pygame.display.set_mode() 函數(shù)之后,檢查 OpenGL 的屬性值不失為一個好的習(xí)慣。參考 pygame.display.gl_set_attribute() 關(guān)于合法標(biāo)志的列表。
pygame.display.gl_set_attribute()設(shè)置當(dāng)前顯示模式的 OpenGL 屬性值。
gl_set_attribute(flag, value) -> None
當(dāng)調(diào)用設(shè)置了 pygame.OPENGL 標(biāo)志的 pygame.display.set_mode() 函數(shù)時,Pygame 會自動設(shè)置 OpenGL 的一些屬性值,例如顏色和雙緩沖區(qū)。OpenGL 其實還提供了其他一些屬性值供你控制。在 flag 參數(shù)中傳入屬性名,并將其值設(shè)置在 value 參數(shù)中。這個函數(shù)必須在 pygame.display.set_mode() 前設(shè)置。
這些 OPENGL 標(biāo)志是:
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()當(dāng)前顯示界面顯示在屏幕上時返回 True。
get_active() -> bool
pygame.display.set_mode() 函數(shù)被調(diào)用之后,Surface 對象將被顯示在屏幕上。大多數(shù)窗口都支持隱藏,如果顯示的 Surface ?對象被隱藏和最小化,那么該函數(shù)將返回 False。
pygame.display.iconify()最小化顯示的 Surface ?對象。
iconify() -> bool
將顯示的Surface 對象最小化或隱藏。并不是所有的操作系統(tǒng)都支持最小化顯示界面。如果該函數(shù)調(diào)用成功,返回 True。
當(dāng)顯示界面最小化時,pygame.display.get_active() 返回 False。事件隊列將接收到 ACTIVEEVENT 事件。
pygame.display.toggle_fullscreen() 切換全屏模式和窗口模式。
toggle_fullscreen() -> bool
切換全屏模式和窗口模式。這個函數(shù)只在 unix x11 顯示驅(qū)動下工作。在大多數(shù)情況下,建議調(diào)用 pygame.display.set_mode() 創(chuàng)建一個新的顯示模式進(jìn)行切換。
pygame.display.set_gamma()修改硬件顯示的 gama 坡道。
set_gamma(red, green=None, blue=None) -> bool
設(shè)置硬件驅(qū)動顯示的紅色、綠色和藍(lán)色伽馬值。如果沒有傳遞 green 和 blue 參數(shù),它們將與 red 值相等。不是所有的操作系統(tǒng)和硬件都支持伽馬坡道。如果函數(shù)修改成功,則返回 True。
伽馬值為 1.0 創(chuàng)建一個線性顏色表,較低的值會使屏幕變暗,較高的值會使屏幕變量。
pygame.display.set_gamma_ramp()自定義修改硬件顯示的 gama 坡道
set_gamma_ramp(red, green, blue) -> bool
使用自定義表設(shè)置硬件驅(qū)動顯示的紅色、綠色和藍(lán)色伽馬坡道。每個參數(shù)必須是 256 位整數(shù)的列表。每位整數(shù)應(yīng)該在 0 和 0xffff 之間。不是所有的操作系統(tǒng)和硬件都支持伽馬坡道。如果函數(shù)修改成功,則返回 True。
pygame.display.set_icon()修改顯示窗口的圖標(biāo)。
set_icon(Surface) -> None
設(shè)置顯示窗口執(zhí)行時的圖標(biāo)。所有的操作系統(tǒng)默認(rèn)都是以簡單的 Pygame LOGO 作為圖標(biāo)。
你可以傳入任何 Surface ?對象作為圖標(biāo),但大多數(shù)操作系統(tǒng)要求圖標(biāo)的大小是 32 * 32。圖標(biāo)可以設(shè)置 colorkey 透明度。
一些操作系統(tǒng)不允許修改顯示中的窗口圖標(biāo)。對于這類操作系統(tǒng),該函數(shù)需要再調(diào)用 pygame.display.set_mode() 前先創(chuàng)建并設(shè)置圖標(biāo)。
pygame.display.set_caption()設(shè)置當(dāng)前窗口的標(biāo)題欄。
set_caption(title, icontitle=None) -> None
如果顯示窗口擁有一個標(biāo)題欄,這個函數(shù)將修改窗口標(biāo)題欄的文本。一些操作系統(tǒng)支持最小化窗口時切換標(biāo)題欄,通過設(shè)置 icontitle 參數(shù)實現(xiàn)。
pygame.display.get_caption()獲取當(dāng)前窗口的標(biāo)題欄。
get_caption() -> (title, icontitle)
返回當(dāng)前窗口的標(biāo)題欄和最小化標(biāo)題欄,通常這兩個值是一樣的。
pygame.display.set_palette()設(shè)置顯示界面的調(diào)色板。
set_palette(palette=None) -> None
這個函數(shù)將修改顯示界面的 8 位調(diào)色板。這不會改變Surface 對象實際的調(diào)色板,僅用于 Surface 對象的顯示。如果沒有傳入?yún)?shù),將恢復(fù)系統(tǒng)默認(rèn)調(diào)色板。調(diào)色板是一組 RGB 三元組序列。
3.draw 模塊
pygame.draw Pygame 中繪制圖形的模塊。
函數(shù)
-
pygame.draw.rect()??—??繪制矩形
-
pygame.draw.polygon()??—??繪制多邊形
-
pygame.draw.circle()??—??根據(jù)圓心和半徑繪制圓形
-
pygame.draw.ellipse()??—??根據(jù)限定矩形繪制一個橢圓形
-
pygame.draw.arc()??—??繪制弧線
-
pygame.draw.line()??—??繪制線段
-
pygame.draw.lines()??—??繪制多條連續(xù)的線段
-
pygame.draw.aaline()??—??繪制抗鋸齒的線段
-
pygame.draw.aalines()??—??繪制多條連續(xù)的線段(抗鋸齒)
該模塊用于在 Surface 對象上繪制一些簡單的形狀。這些函數(shù)將渲染到任何格式的 Surface 對象上。硬件渲染會比普通的軟件渲染更耗時。
大部分函數(shù)用 width 參數(shù)指定圖形邊框的大小,如果 width = 0 則表示填充整個圖形。
所有的繪圖函數(shù)僅能在 Surface 對象的剪切區(qū)域生效。這些函數(shù)返回一個 Rect,表示包含實際繪制圖形的矩形區(qū)域。
大部分函數(shù)都有一個 color 參數(shù),傳入一個表示 RGB 顏色值的三元組,當(dāng)然也支持 RGBA 四元組。其中的 A 是 Alpha 的意思,用于控制透明度。不過該模塊的函數(shù)并不會繪制透明度,而是直接傳入到對應(yīng) Surface ?對象的 pixel alphas 中。color 參數(shù)也可以是已經(jīng)映射到 Surface ?對象的像素格式中的整型像素值。
當(dāng)這些函數(shù)在繪制時,必須暫時鎖定 Surface ?對象。許多連續(xù)繪制的函數(shù)可以通過一次性鎖定直到畫完再解鎖來提高效率。
函數(shù)詳解pygame.draw.rect()繪制矩形。
rect(Surface, color, Rect, width=0) -> Rect
在 Surface ?對象上繪制一個矩形。Rect 參數(shù)指定矩形的位置和尺寸。width 參數(shù)指定邊框的寬度,如果設(shè)置為 0 則表示填充該矩形。
pygame.draw.polygon()繪制多邊形。
polygon(Surface, color, pointlist, width=0) -> Rect 在 Surface ?對象上繪制一個多邊形。pointlist 參數(shù)指定多邊形的各個頂點。width 參數(shù)指定邊框的寬度,如果設(shè)置為 0 則表示填充該矩形。
繪制一個抗鋸齒的多邊形,只需要將 aalines() 的 closed 參數(shù)設(shè)置為 True 即可。
pygame.draw.circle()根據(jù)圓心和半徑繪制圓形。
circle(Surface, color, pos, radius, width=0) -> Rect
在 Surface ?對象上繪制一個圓形。pos 參數(shù)指定圓心的位置,radius 參數(shù)指定圓的半徑。width 參數(shù)指定邊框的寬度,如果設(shè)置為 0 則表示填充該矩形。
pygame.draw.ellipse()根據(jù)限定矩形繪制一個橢圓形。
ellipse(Surface, color, Rect, width=0) -> Rect
在 Surface ?對象上繪制一個橢圓形。Rect 參數(shù)指定橢圓外圍的限定矩形。width 參數(shù)指定邊框的寬度,如果設(shè)置為 0 則表示填充該矩形。
pygame.draw.arc()繪制弧線。
arc(Surface, color, Rect, start_angle, stop_angle, width=1) -> Rect
在 Surface ?對象上繪制一條弧線。Rect 參數(shù)指定弧線所在的橢圓外圍的限定矩形。兩個 angle 參數(shù)指定弧線的開始和結(jié)束位置。width 參數(shù)指定邊框的寬度。
pygame.draw.line()繪制線段。
line(Surface, color, start_pos, end_pos, width=1) -> Rect
在 Surface ?對象上繪制一條線段。兩端以方形結(jié)束。
pygame.draw.lines()繪制多條連續(xù)的線段。
lines(Surface, color, closed, pointlist, width=1) -> Rect
在 Surface ?對象上繪制一系列連續(xù)的線段。pointlist 參數(shù)是一系列短點。如果 closed 參數(shù)設(shè)置為 True,則繪制首尾相連。
pygame.draw.aaline()繪制抗鋸齒的線段。
aaline(Surface, color, startpos, endpos, blend=1) -> Rect
在 Surface ?對象上繪制一條抗鋸齒的線段。blend 參數(shù)指定是否通過繪制混合背景的陰影來實現(xiàn)抗鋸齒功能。該函數(shù)的結(jié)束位置允許使用浮點數(shù)。
pygame.draw.aalines()繪制多條連續(xù)的線段(抗鋸齒)。
aalines(Surface, color, closed, pointlist, blend=1) -> Rect
在 Surface ?對象上繪制一系列連續(xù)的線段(抗鋸齒)。如果 closed 參數(shù)為 True,則首尾相連。blend 參數(shù)指定是否通過繪制混合背景的陰影來實現(xiàn)抗鋸齒功能。該函數(shù)的結(jié)束位置允許使用浮點數(shù)。
#?公眾號:一行數(shù)據(jù)
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 模塊。
函數(shù)
-
pygame.event.pump()??—??讓 Pygame 內(nèi)部自動處理事件
-
pygame.event.get()??—??從隊列中獲取事件
-
pygame.event.poll()??—??從隊列中獲取一個事件
-
pygame.event.wait()??—??等待并從隊列中獲取一個事件
-
pygame.event.peek()??—??檢測某類型事件是否在隊列中
-
pygame.event.clear()??—??從隊列中刪除所有的事件
-
pygame.event.event_name()??—??通過 id 獲得該事件的字符串名字
-
pygame.event.set_blocked()??—??控制哪些事件禁止進(jìn)入隊列
-
pygame.event.set_allowed()??—??控制哪些事件允許進(jìn)入隊列
-
pygame.event.get_blocked()??—??檢測某一類型的事件是否被禁止進(jìn)入隊列
-
pygame.event.set_grab()??—??控制輸入設(shè)備與其他應(yīng)用程序的共享
-
pygame.event.get_grab()??—??檢測程序是否共享輸入設(shè)備
-
pygame.event.post()??—??放置一個新的事件到隊列中
-
pygame.event.Event()??—??創(chuàng)建一個新的事件對象
-
pygame.event.EventType ?—??代表 SDL 事件的 Pygame 對象 Pygame 通過事件隊列控制所有的時間消息。該模塊中的程序?qū)湍愎芾硎录犃小]斎腙犃泻艽蟪潭纫蕾囉?pygame 的 display 模塊。如果 display 沒有被初始化,顯示模式?jīng)]有被設(shè)置,那么事件隊列就還沒有開始真正工作。
常規(guī)的隊列是由 pygame.event.EventType 定義的事件對象的組成,有多種方法來訪問里邊的事件對象:從簡單的檢測事件是否存在,到直接從棧中獲取它們。
所有事件都有一個類型標(biāo)識符,這個標(biāo)識符對應(yīng)的值定義在 NOEVENT 到 NUMEVENTS 之間(溫馨提示:類似于 C 語言的宏定義,明白?)。用戶可以自行定義事件,但類型標(biāo)識符的值應(yīng)該高于或等于 USEREVENT。
獲取各種輸入設(shè)備的狀態(tài),推薦你直接通過它們相應(yīng)的模塊(mouse,key 和 joystick)提供的函數(shù)訪問,而不是通過事件隊列;如果你使用此函數(shù),請記住,Pygame 需要通過一些方式與系統(tǒng)的窗口管理器和平臺的其他部分進(jìn)行通信。為了保持 Pygame 和系統(tǒng)同步,你需要調(diào)用 pygame.event.pump() 確保實時更新,你將在游戲的每次循環(huán)中調(diào)用這個函數(shù)。
事件隊列提供了一些簡單的過濾。通過阻止某些事件進(jìn)入事件隊列,可以略微提高游戲的性能(溫馨提示:因為這樣事件隊列的尺寸就會小一些,所以說可以略微提升性能)。使用 pygame.event.set_allowed() 和 pygame.event.set_blocked() 來控制某些事件是否允許進(jìn)入事件隊列。默認(rèn)所有事件都會進(jìn)入事件隊列。
事件子系統(tǒng)應(yīng)該在主線程被調(diào)用。如果你希望從其他線程中投遞事件消息進(jìn)入事件隊列,請使用 fastevent 包。
Joysticks(游戲手柄)只有在設(shè)備初始化后才會發(fā)送事件。
一個 EventType 事件對象包含一個事件類型標(biāo)識符和一組成員數(shù)據(jù)(事件對象不包含方法,只有數(shù)據(jù))。EventType 對象從 Python 的事件隊列中獲得,你也可以使用 pygame.event.Event() 函數(shù)創(chuàng)建自定義的新事件。
由于 SDL 的事件隊列限制了事件數(shù)量的上限(標(biāo)準(zhǔn)的 SDL 1.2 限制為 128),所以當(dāng)隊列已滿時,新的事件將會被扔掉。為了防止丟失事件消息,尤其是代表退出的輸入事件(因為當(dāng)用戶點擊退出按鈕沒有反應(yīng),往往會被認(rèn)為“死機”了),你的程序必須定期檢測事件,并對其進(jìn)行處理。
為了加快事件隊列的處理速度,可以使用 pygame.event.set_blocked() 函數(shù)阻止一些我們不關(guān)注的事件進(jìn)入隊列中。
所有的 EventType 實例對象都擁有一個事件類型標(biāo)識符,屬性名是 type。你也可以通過事件對象的 dict 屬性來完全訪問其他屬性。所有其他成員屬性的值都是通過事件對象的字典來傳遞。
5.font模塊
pygame.fontPygame 中加載和表示字體的模塊。
函數(shù)
-
pygame.font.init()??——??初始化字體模塊
-
pygame.font.quit()??——??還原字體模塊
-
pygame.font.get_init()??——??檢查字體模塊是否被初始化
-
pygame.font.get_default_font()??——??獲得默認(rèn)字體的文件名
-
pygame.font.get_fonts()??——??獲取所有可使用的字體
-
pygame.font.match_font()??——??在系統(tǒng)中搜索一種特殊的字體
-
pygame.font.SysFont()??——??從系統(tǒng)字體庫創(chuàng)建一個 Font 對象 類
-
pygame.font.Font ??——? 從一個字體文件創(chuàng)建一個 Font 對象 字體模塊可以在一個新的 Surface 對象上表示 TrueType 字體。它接受所有 UCS-2 字符('u0001' 到 'uFFFF')。此模塊為可選擇模塊,并且依賴于 SDL_ttf。在使用之前,你需要先測試該模塊是否可用,而且對其進(jìn)行初始化。
通過使用現(xiàn)有的 Font 對象,可以完成大多數(shù)與字體有關(guān)的工作。Pygame.font 模塊自身僅可以完成常規(guī)的初始化以及通過 pygame.font.Font() 創(chuàng)建 Font 對象。
你可以通過使用 pygame.font.SysFont() 函數(shù)從系統(tǒng)內(nèi)加載字體。另外還有其他幾個函數(shù)可以幫助你搜索系統(tǒng)的字體。
Pygame 配備了內(nèi)建的默認(rèn)字體。通過傳遞 "None" 為文件名訪問此字體。
在 pygame 第一次導(dǎo)入之前,當(dāng)pygame.font 模塊確定環(huán)境變量 PYGAME_FREETYPE 時使用基于 pygame.ftfont 的 pygame.freetype 模塊。Pygame.ftfont 是一個pygame.font 可兼容模塊,兼容絕大部分,除開其中某個字體模塊單元測試:Pygame.ftfont 并沒有基于字體模塊的 SDL_ttf 的 UCS-2 字符限制,所以對于大于 'uFFFF' 的碼點會產(chǎn)生異常。如果 pygame.freetype 是不可使用的,那么 SDL_ttf 字體模塊將會被加載用于替代。
常用函數(shù)詳解類 class pygame.font.Font 從一個字體文件創(chuàng)建一個 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()??——??獲取字符串參數(shù)每個字符的參數(shù)
-
pygame.font.Font.get_italic()??——??檢查文本是否使用斜體渲染
-
pygame.font.Font.get_linesize()??——??獲取字體文本的行高
-
pygame.font.Font.get_height()??——??獲取字體的高度
-
pygame.font.Font.get_ascent()??——??獲取字體頂端到基準(zhǔn)線的距離
-
pygame.font.Font.get_descent()??——??獲取字體底端到基準(zhǔn)線的距離
-
根據(jù)提供的文件名或者 python 文件對象加載一個新的字體。字體的高度是以像素為單位。如果文件名是 "None",則加載 Pygame 的默認(rèn)字體。如果一個字體無法由給定的參數(shù)加載,將會產(chǎn)生一個異常。一旦字體已經(jīng)創(chuàng)建完畢,那么字體的尺寸將不能修改。
字體對象主要被用于在新 Surface 對象中渲染文本。文本可以渲染為仿真的粗體或者斜體特征,但最好是加載的字體本身就帶有粗體或者斜體字形。可以用普通字符串或者 Unicode 編碼字符來渲染文本。
方法詳解
pygame.font.Font.render() 在一個新 Surface 對象上繪制文本。
render(text, antialias, color, background=None) -> Surface
該函數(shù)創(chuàng)建一個新的 Surface 對象,并在上邊渲染指定的文本。Pygame 沒有提供直接的方式在一個現(xiàn)有的 Surface 對象上繪制文本,取而代之的方法是:使用 Font.render() 函數(shù)創(chuàng)建一個渲染了文本的圖像(Surface 對象),然后將這個圖像繪制到目標(biāo) Surface 對象上。
僅支持渲染一行文本:“換行”字符不會被渲染。空字符('x00')被渲染將產(chǎn)生一個 TypeError 錯誤。Unicode 和 char(字節(jié))字符串都可以被接受。對于 Unicode 字符串,僅 UCS-2 字符范圍('u0001' 到 'uFFFF')被認(rèn)為是有效的。任何編碼值更大字符的字符會產(chǎn)生一個 UnicodeError 的錯誤;對于 char 字符串,默認(rèn)的是使用 LATIN1 編碼。color 參數(shù)決定的是文本的顏色(例如:(0, 0, 255) 表示藍(lán)色)。可選參數(shù) background 決定了文本的背景顏色。如果沒有傳遞 background 參數(shù),則對應(yīng)區(qū)域內(nèi)表示的文本背景將會被設(shè)置為透明。
返回的 Surface 對象將保持表示文本所需要的尺寸(與 Font.size() 所返回的尺寸相同)。如果將一個空字符串渲染為文本,將會返回一個空白 Surface 對象,它僅有一個像素點的寬度,但高度與字體高度一樣。
由于取決于文本背景的類型和抗鋸齒功能的使用,該函數(shù)將會返回不同類型的 Surface 對象。出于性能上的考慮,了解何種類型的圖像會被使用是很有幫助的:如果抗鋸齒功能沒有被使用,返回的圖像將采用二元調(diào)色的 8 位圖像。此時如果背景是透明的,只設(shè)置一個 colorkey 來實現(xiàn);抗鋸齒圖像會被渲染為 24 位 RGB 圖像。此時如果背景是透明的,每個像素都將包含一個 alpha 通道。
優(yōu)化:如果你已知文本最終將繪制在一個純色的背景上,那么文本是抗鋸齒的,你可以通過指定文本的背景色來提高性能(將文本背景色設(shè)置目標(biāo) Surface 對象的顏色)。使用這個技巧,你只需用一個 colorkey 即可保持透明信息,而不需要設(shè)置每個像素的 alpha 通道值(這樣效率會低很多)。
如果你嘗試渲染 '\n',通常是顯示為一個矩形(未知字符)。因此,你需要自己想辦法處理換行。
字體渲染并不是線程安全的行為:在任何時候僅有一個線程可以渲染文本。
6.image模塊
pygame.image用于圖像傳輸?shù)?Pygame 模塊。
函數(shù)
-
pygame.image.load()??—??從文件加載新圖片
-
pygame.image.save()??—??將圖像保存到磁盤上
-
pygame.image.get_extended()??—??檢測是否支持載入擴展的圖像格式
-
pygame.image.tostring()??—??將圖像轉(zhuǎn)換為字符串描述
-
pygame.image.fromstring()??—??將字符串描述轉(zhuǎn)換為圖像
-
pygame.image.frombuffer()??—??創(chuàng)建一個與字符串描述共享數(shù)據(jù)的 Surface 對象 image 模塊包含了加載和保存圖像的函數(shù),同時轉(zhuǎn)換為 Surface 對象支持的格式。
注意:沒有 Image 類;當(dāng)一個圖像被成功載入后,將轉(zhuǎn)換為 Surface ?對象。Surface ?對象允許你在上邊畫線、設(shè)置像素、捕獲區(qū)域等。
Image 是 Pygame 相當(dāng)依賴的一個模塊,支持載入的圖像格式如下:
-
JPG
-
PNG
-
GIF(無動畫)
-
BMP
-
PCX
-
TGA(無壓縮)
-
TIF
-
LBM(和 PBM)
-
PBM(和 PGM,PPM)
-
XPM 支持保存為以下格式:
-
BMP
-
TGA
-
PNG
-
JPEG 其中,保存為 PNG 和 JPEG 格式是 Pygame 1.8 新增加的。
函數(shù)詳解pygame.image.load()從文件加載新圖片。
load(filename) -> Surface
load(fileobj, namehint=””) -> Surface
從文件加載一張圖片,你可以傳遞一個文件路徑或一個 Python 的文件對象。
Pygame 將自動判斷圖像的格式(比如 GIF 或位圖)并創(chuàng)建一個新的 Surface ?對象。有時它可能需要知道文件的后綴名(比如 GIF 圖像應(yīng)該以 ".gif" 為后綴)。如果你傳入原始文件對象,你需要傳入它對應(yīng)的文件名到 namehint 參數(shù)中。
返回的 Surface ?對象將包含與源文件相同的顏色格式,colorkey 和 alpha 透明度通道。你通常需要調(diào)用 Surface.convert()?函數(shù)進(jìn)行轉(zhuǎn)換,這樣可以使得在屏幕上繪制的速度更快。
對于含有 alpha 通道的圖片(支持部分位置透明,像 PNG 圖像),需要使用 Surface.convert_alpha()?函數(shù)進(jìn)行轉(zhuǎn)換。
在某些環(huán)境下,Pygame 可能無法支持上述所有的圖像格式,但至少無壓縮的 BMP 格式是支持的。你可以調(diào)用 pygame.image.get_extended() 函數(shù),如果返回 True,說明可以加載上述的格式(包含 PNG,JPG 和 GIF)。
你應(yīng)該使用 os.path.join() 提高代碼的兼容性:
asurf = pygame.image.load(os.path.join('data', 'Python.png'))
pygame.image.save()將圖像保存到磁盤上。
save(Surface, filename) -> None
該函數(shù)將保存 Surface ?對象到磁盤上,支持存儲為 BMP,TGA,PNG 或 JPEG 格式的圖像。如果 filename 沒有指定后綴名,那么默認(rèn)是保存為 TGA 格式。TGA 和 BMP 格式是無壓縮的文件。
保存為 PNG 和 JPEG 格式是 Pygame 1.8 新增的。
pygame.image.get_extended()檢測是否支持載入擴展的圖像格式。
get_extended() -> bool
如果 Pygame 支持上述所有的擴展圖像格式,則返回 True。
pygame.image.tostring()將圖像轉(zhuǎn)換為字符串描述。
tostring(Surface, format, flipped=False) -> string
將圖像轉(zhuǎn)換為一個字符串描述,可以被 Python 的其他圖像模塊通過 "fromstring" 轉(zhuǎn)換回圖像。一些 Python 圖像模塊喜歡“自下而上”的存儲格式(例如 PyOpenGL)。如果 flipped 參數(shù)為 True,那么字符串將會垂直翻轉(zhuǎn)以適用這類圖像模塊。
format 參數(shù)可以是下表中任何一個字符串。注意:只有 8 位的 Surface ?對象可以使用 "P" 格式。其他格式可以用于任何 Surface ?對象上。
pygame.image.fromstring()將字符串描述轉(zhuǎn)換為圖像。
fromstring(string, size, format, flipped=False) -> Surface
該函數(shù)的使用跟 pygame.image.tostring() 相似。size 參數(shù)是一對表示寬度和高度的數(shù)字。一旦新的 Surface 對象創(chuàng)建成功,你就可以刪除字符串描述。
size 和 format 參數(shù)指定的數(shù)據(jù)需要跟字符串描述相符,否則將拋出異常。
更快地將圖片轉(zhuǎn)換到 Pygame,請參考 pygame.image.frombuffer() 函數(shù)。
pygame.image.frombuffer()創(chuàng)建一個與字符串描述共享數(shù)據(jù)的 Surface 對象。
frombuffer(string, size, format) -> Surface
創(chuàng)建一個新的 Surface 對象,與字符串描述直接共享像素數(shù)據(jù)。該函數(shù)的使用跟 pygame.image.fromstring() 類似,但沒法垂直翻轉(zhuǎn)原始數(shù)據(jù)。
該函數(shù)的速度會比 pygame.image.fromstring() 快很多,因為該函數(shù)不需要申請和拷貝任何像素數(shù)據(jù)。
7.key模塊
pygame.key與鍵盤相關(guān)的 Pygame 模塊。
函數(shù)
-
pygame.key.get_focused()??—??當(dāng)窗口獲得鍵盤的輸入焦點時返回 True
-
pygame.key.get_pressed()??—??獲取鍵盤上所有按鍵的狀態(tài)
-
pygame.key.get_mods()??—??檢測是否有組合鍵被按下
-
pygame.key.set_mods()??—??臨時設(shè)置某些組合鍵為被按下狀態(tài)
-
pygame.key.set_repeat()??—??控制重復(fù)響應(yīng)持續(xù)按下按鍵的時間
-
pygame.key.get_repeat()??—??獲取重復(fù)響應(yīng)按鍵的參數(shù)
-
pygame.key.name()??—??獲取按鍵標(biāo)識符對應(yīng)的名字 該模塊包含處理與鍵盤操作相關(guān)的函數(shù)。當(dāng)鍵盤按鍵被按下和釋放時,事件隊列將獲得 pygame.KEYDOWN 和 pygame.KEYUP 事件消息。這兩個消息均包含 key 屬性,是一個整數(shù)的 id,代表鍵盤上具體的某個按鍵。
pygame.KYEDOWN 事件還有個額外的屬性 unicode 和 scancode。unicode 代表一個按鍵翻譯后的 Unicode 編碼,這包含 shift 按鍵和組合鍵。scancode 是掃描碼,不同鍵盤間該值可能不同。不過這對于特殊按鍵像多媒體鍵的選擇是有用的。
溫馨提示:當(dāng)鍵盤按下的時候,鍵盤會發(fā)送一個掃描碼給系統(tǒng)。掃描碼是鍵盤反饋哪一個按鍵被按下的方式,不同類型的鍵盤掃描碼不同。再由系統(tǒng)調(diào)用相應(yīng)的函數(shù)將其轉(zhuǎn)換為統(tǒng)一的 Unicode 編碼。
key 屬性的值是一個數(shù)字,為了方便使用,Pygame 將這些數(shù)字定義為以下這些常量:
| KeyASCII | ASCII | 描述 |
|---|---|---|
| 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_0 | 0 | 0 |
| K_1 | 1 | 1 |
| K_2 | 2 | 2 |
| K_3 | 3 | 3 |
| K_4 | 4 | 4 |
| K_5 | 5 | 5 |
| K_6 | 6 | 6 |
| K_7 | 7 | 7 |
| K_8 | 8 | 8 |
| K_9 | 9 | 9 |
| 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_a | a | a |
| K_b | b | b |
| K_c | c | c |
| K_d | d | d |
| K_e | e | e |
| K_f | f | f |
| K_g | g | g |
| K_h | h | h |
| K_i | i | i |
| K_j | j | j |
| K_k | k | k |
| K_l | l | l |
| K_m | m | m |
| K_n | n | n |
| K_o | o | o |
| K_p | p | p |
| K_q | q | q |
| K_r | r | r |
| K_s | s | s |
| K_t | t | t |
| K_u | u | u |
| K_v | v | v |
| K_w | w | w |
| K_x | x | x |
| K_y | y | y |
| K_z | z | z |
| 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 | 數(shù)字鍵盤鎖定鍵(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 | 模式轉(zhuǎn)換鍵(mode shift) | |
| K_HELP | 幫助鍵(help) | |
| K_PRINT | 打印屏幕鍵(print screen) | |
| K_SYSREQ | 魔術(shù)鍵(sysrq) | |
| K_BREAK | 中斷鍵(break) | |
| K_MENU | 菜單鍵(menu) | |
| K_POWER | 電源鍵(power) | |
| K_EURO | 歐元符號(euro) |
還有一個 mod 屬性,用于描述組合鍵狀態(tài)。
以下是組合鍵的常量定義:
| 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 | 同時按下數(shù)字鍵盤鎖定鍵 |
| KMOD_MODE | 同時按下模式轉(zhuǎn)換鍵 |
溫馨提示:如果 mod & KMOD_CTRL 是真的話,表示用戶同時按下了 Ctrl 鍵。
函數(shù)詳解pygame.key.get_focused()當(dāng)窗口獲得鍵盤的輸入焦點時返回 True。
get_focused() -> bool
當(dāng)窗口獲得鍵盤的輸入焦點時返回 True,如果窗口需要確保不失去鍵盤焦點,可以使用 pygame.event.set_grab(True) 獨占所有的輸入接口。
溫馨提示:注意,這樣做你就無法將鼠標(biāo)移出窗口客戶區(qū)了,但你仍然可以通過 Ctrl - Alt - Delete 熱鍵“解圍”。
pygame.key.get_pressed()獲取鍵盤上所有按鍵的狀態(tài)。
get_pressed() -> bools
返回一個由布爾類型值組成的序列,表示鍵盤上所有按鍵的當(dāng)前狀態(tài)。使用 key 常量作為索引,如果該元素是 True,表示該按鍵被按下。
使用該函數(shù)獲取一系列按鈕被按下的狀態(tài),并不能正確的獲取用戶輸入的文本。因為你無法知道用戶按鍵的被按下的順序,并且快速的連續(xù)按下鍵盤可能無法完全被捕獲(在兩次調(diào)用 pygame.key.get_pressed() 的過程中被忽略),也無法將這些按下的按鍵完全轉(zhuǎn)化為字符值。實現(xiàn)此功能可以通過捕獲 pygame.KEYDOWN 事件消息來實現(xiàn)。
pygame.key.get_mods()檢測是否有組合鍵被按下。
get_mods() -> int
返回一個包含所有組合鍵位掩碼的整數(shù)。使用位操作符 & 你可以檢測某個組合鍵是否被按下。
溫馨提示:假如 pygame.key.get_mods() 返回值存放在 mods 變量中,如果 mods & KMOD_CTRL 為 True,表示 ctrl 鍵正被按下。
pygame.key.set_mods() 臨時設(shè)置某些組合鍵為被按下狀態(tài)。
set_mods(int) -> None
創(chuàng)建一個位掩碼整數(shù),包含你需要設(shè)置為被按下狀態(tài)的組合鍵。
溫馨提示:比如我們需要設(shè)置 ctrl 和 alt 組合鍵為按下狀態(tài),則可以 mods = KMOD_CTRL | KMOD_ALT,然后調(diào)用 pygame.key.set_mods(mods),這樣盡管用戶沒有按下 ctrl 和 alt 組合鍵,它們依然是顯示被按下狀態(tài)。
pygame.key.set_repeat()控制重復(fù)響應(yīng)持續(xù)按下按鍵的時間。
set_repeat() -> None
set_repeat(delay, interval) -> None
當(dāng)開啟重復(fù)響應(yīng)按鍵,那么用戶持續(xù)按下某一按鍵,就會不斷產(chǎn)生同一 pygame.KEYDOWN 事件。delay 參數(shù)設(shè)置多久后(單位是毫秒)開始發(fā)送第一個 pygame.KEYDOWN 事件。interval 參數(shù)設(shè)置發(fā)送兩個事件之間的間隔。如果不傳入任何參數(shù),表示取消重復(fù)響應(yīng)按鍵。
pygame.key.get_repeat()獲取重復(fù)響應(yīng)按鍵的參數(shù)。
get_repeat() -> (delay, interval)
當(dāng)開啟重復(fù)響應(yīng)按鍵,那么用戶持續(xù)按下某一按鍵,就會不斷產(chǎn)生同一 pygame.KEYDOWN 事件。返回值是一個二元組,第一個元素 delay 表示多久后(單位是毫秒)開始發(fā)送第一個 pygame.KEYDOWN 事件。第二個元素 interval 表示發(fā)送兩個事件之間的間隔。
默認(rèn)情況下重復(fù)響應(yīng)按鍵是沒有開啟的。
Pygame 1.8 新增加的。
pygame.key.name()獲取按鍵標(biāo)識符對應(yīng)的名字。
name(key) -> string
獲取一個按鍵標(biāo)識符對應(yīng)的字符串描述
8.locals模塊
pygame.localsPygame 定義的常量。
這個模塊包含了 Pygame 定義的各種常量。它的內(nèi)容會被自動放入到 Pygame 模塊的名字空間中。你可以使用
from pygame.locals import將所有的 Pygame 常量導(dǎo)入。
各個常量的詳細(xì)描述記錄在 Pygame 各個模塊的相關(guān)文檔中。比如 pygame.display.set_mode() 方法用到的 HWSURFACE 常量,你就可以在 display 模塊的文檔中找到詳細(xì)的說明;事件類型在 event 模塊的文檔中可以找到;當(dāng)產(chǎn)生 KEYDOWN 或 KEYUP 事件時,key 屬性描述具體哪個按鍵被按下,該值是以 K_ 開頭的常量(MOD_ 開頭的常量表示各種組合鍵被按下),在 key 模塊的文檔中可以找到;最后,TIME_RESOLUTION 被定義在 time 模塊中。
9.mixer模塊
pygame.mixer用于加載和播放聲音的pygame模塊
函數(shù)
-
pygame.mixer.init ?— ?初始化混音器模塊
-
pygame.mixer.pre_init ?— ?預(yù)設(shè)混音器初始化參數(shù)
-
pygame.mixer.quit ?— ?卸載混音器模塊
-
pygame.mixer.get_init ?— ?測試混音器是否初始化
-
pygame.mixer.stop ?— ?停止播放所有通道
-
pygame.mixer.pause ?— ?暫停播放所有通道
-
pygame.mixer.unpause ?— ?恢復(fù)播放
-
pygame.mixer.fadeout ?— ?淡出停止
-
pygame.mixer.set_num_channels ?— ?設(shè)置播放頻道的總數(shù)
-
pygame.mixer.get_num_channels ?— ?獲取播放頻道的總數(shù)
-
pygame.mixer.set_reserved ?— ?預(yù)留頻道自動使用
-
pygame.mixer.find_channel ? — ?找到一個未使用的頻道
-
pygame.mixer.get_busy ?— ?測試混音器是否正在使用類
-
pygame.mixer.Sound ? — ?從文件或緩沖區(qū)對象創(chuàng)建新的Sound對象
-
pygame.mixer.Channel ? — ?創(chuàng)建一個Channel對象來控制播放
此模塊包含用于加載 Sound 對象和控制播放的類。混音器模塊是可選的,取決于SDL_mixer。您的程序應(yīng)該在使用它之前 測試 pygame.mixer 模塊是否可用并進(jìn)行初始化。
混音器模塊具有有限數(shù)量的聲音播放聲道。通常程序會告訴 pygame 開始播放音頻,它會自動選擇一個可用的頻道。默認(rèn)為8個并發(fā)通道,但復(fù)雜的程序可以更精確地控制通道數(shù)量及其使用。
所有聲音播放都混合在后臺線程中。當(dāng)您開始播放Sound對象時,它會在聲音繼續(xù)播放時立即返回。單個Sound對象也可以自動播放多次。
混音器還有一個特殊流通道用于音樂播放,可通過 pygame.mixer.music 模塊訪問。
混音器模塊必須像其他 pygame 模塊一樣進(jìn)行初始化,但它有一些額外的條件。pygame.mixer.init() 函數(shù)采用幾個可選參數(shù)來控制播放速率和樣本大小。Pygame將 默認(rèn)為合理的值,但pygame無法執(zhí)行聲音重采樣,因此應(yīng)初始化混音器以匹配音頻資源的值。
注意:不要使用較少的延遲聲音,請使用較小的緩沖區(qū)大小。?默認(rèn)設(shè)置為減少某些計算機上發(fā)出沙啞聲音的可能性。?您可以在 pygame.mixer.init() 或者 pygame.init() 之前 通過調(diào)用pygame.mixer.pre_init()預(yù)設(shè)混合器初始化參數(shù)來更改默認(rèn)緩沖區(qū)。?例如:pygame.mixer.pre_init(44100,-16,2,1024)。在pygame 1.8中,默認(rèn)大小從1024更改為3072。
函數(shù)詳解pygame.mixer.init() 初始化混音器模塊 init(frequency=22050, size=-16, channels=2, buffer=4096) -> None 初始化混音器模塊以進(jìn)行聲音加載和播放。默認(rèn)參數(shù)可以被改變以提供特定的音頻混合。允許使用關(guān)鍵字參數(shù)。對于參數(shù)設(shè)置為零的向后兼容性,使用默認(rèn)值(可能由pre_init調(diào)用更改)。
size參數(shù)表示每個音頻樣本使用的位數(shù)。如果值為負(fù),則將使用帶符號的樣本值。正值表示將使用不帶符號的音頻樣本。無效值會引發(fā)異常。
pygame 2中的新功能(使用SDL2編譯時) - 大小可以是32(32位浮點數(shù))。
channels參數(shù)用于指定是使用單聲道還是立體聲。1表示單聲道,2表示立體聲。不支持其他值(負(fù)值被視為1,大于2的值被視為2)。
buffer參數(shù)控制混音器中使用的內(nèi)部采樣數(shù)。默認(rèn)值應(yīng)適用于大多數(shù)情況。可以降低它以減少延遲,但可能會發(fā)生聲音丟失。它可以被提升到更大的值,以確保播放永遠(yuǎn)不會跳過,但它會對聲音播放施加延遲。緩沖區(qū)大小必須是2的冪(如果不是,則向上舍入到下一個最接近的2的冪)。
某些平臺需要在 display 模塊初始化后初始化pygame.mixer 模塊。頂級pygame.init() 自動處理此問題,但無法將任何參數(shù)傳遞給 mixer init。為了解決這個問題,mixer 具有pygame.mixer.pre_init() 函數(shù)在使用頂層初始化之前設(shè)置正確默認(rèn)值。
多次調(diào)用是安全的,但是在初始化混音器后,如果沒有先調(diào)用 pygame.mixer.quit(),則無法更改播放參數(shù) 。
pygame.mixer.pre_init(預(yù)設(shè)混音器初始化參數(shù)
pre_init(frequency=22050, size=-16, channels=2, buffersize=4096) -> None
調(diào)用 pre_init 可以更改調(diào)用 真正的初始化 pygame.mixer.init() 使用的默認(rèn)值。允許使用關(guān)鍵字參數(shù)。設(shè)置自定義混音器播放值的最佳方法是 在調(diào)用頂級 pygame.init() 之前調(diào)用 pygame.mixer.pre_init()。對于向后兼容性參數(shù),零值將替換為啟動默認(rèn)值。
pygame.mixer.quit()退出混音器
quit() -> None
這將卸載 pygame.mixer,如果稍候重新初始化,則所有播放將停止并且任何加載的Sound對象可能與混音器不兼容。
pygame.mixer.get_init()測試混音器是否初始化
get_init() -> (frequency, format, channels)
如果混合器已初始化,則返回正在使用的播放參數(shù)。如果混音器尚未初始化,則返回None
pygame.mixer.stop()停止播放所有聲道
stop() -> None
這將停止所有活動混音器通道的播放。
pygame.mixer.pause()暫時停止播放所有聲道
pause() -> None
這將暫時停止活動混音器通道上的所有播放。稍后可以 通過 pygame.mixer.unpause() 恢復(fù)播放
pygame.mixer.unpause()恢復(fù)播放聲道
unpause() -> None
這將在暫停后恢復(fù)所有活動聲道。
pygame.mixer.fadeout()停止前淡出所有聲音的音量
fadeout(time) -> None
這將在設(shè)定時間上淡出所有活動通道上的音量,時間以毫秒為單位。聲音靜音后,播放將停止。
pygame.mixer.set_num_channels()設(shè)置播放頻道的總數(shù)
set_num_channels(count) -> None
設(shè)置調(diào)音臺的可用頻道數(shù)。默認(rèn)值為8。可以增加或減少該值。如果該值減小,則截斷的通道上播放的聲音將停止。
pygame.mixer.get_num_channels()獲取播放頻道的總數(shù)
get_num_channels() -> count
返回當(dāng)前活動的播放通道數(shù)。
pygame.mixer.set_reserved()預(yù)留頻道自動使用
set_reserved(count) -> None
調(diào)音臺可以保留任意數(shù)量的通道,這些通道不會被聲音自動選擇播放。如果聲音當(dāng)前正在預(yù)留頻道播放,則不會停止。
這允許應(yīng)用程序為重要聲音保留特定數(shù)量的聲道,這些聲音不得被丟棄或具有可保證的頻道。
pygame.mixer.find_channel()找到一個未使用的頻道
find_channel(force=False) -> Channel
這將找到并返回一個非活動的Channel對象。如果沒有非活動通道,則此函數(shù)將返回None。如果沒有非活動通道且force參數(shù)為True,則會找到運行時間最長的聲道并返回它。
如果調(diào)音臺有 pygame.mixer.set_reserved() 保留頻道,則此處不會返回這些頻道。
pygame.mixer.get_busy()測試mixer 是否正忙
get_busy() -> bool
如果混音器正忙,則返回True。如果混音器處于空閑狀態(tài),則返回False。
類 pygame.mixer.Sound 從文件或緩沖區(qū)對象創(chuàng)建新的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? ? ? ? -? ? ? ? 設(shè)置此聲音的播放音量
-
-
pygame.mixer.Sound.get_volume? ? ? ? -? ? ? ? 獲取播放音量
-
-
pygame.mixer.Sound.get_num_channels? ? ? ? -? ? ? ? 計算此聲音播放的次數(shù)
-
pygame.mixer.Sound.get_length? ? ? ? -? ? ? ? 得到聲音的長度
-
pygame.mixer.Sound.get_raw ?? ? ? -? ? ? ? 返回Sound樣本的bytestring副本。從文件名,python文件對象或可讀緩沖區(qū)對象加載新的聲音緩沖區(qū)。將執(zhí)行有限的重新采樣以幫助樣本匹配混音器的初始化參數(shù)。Unicode字符串只能是文件路徑名。Python 2.x字符串或Python 3.x字節(jié)對象可以是路徑名或緩沖區(qū)對象。使用'file'或'buffer'關(guān)鍵字來避免歧義; 否則Sound可能會猜錯。如果使用了array關(guān)鍵字,則該對象應(yīng)該導(dǎo)出版本3,C級別數(shù)組接口,或者對于Python 2.6或更高版本,導(dǎo)出新的緩沖區(qū)接口(首先檢查該對象的緩沖區(qū)接口。)
Sound對象表示實際的聲音樣本數(shù)據(jù)。更改Sound對象狀態(tài)的方法將是Sound播放的所有實例。Sound對象還導(dǎo)出數(shù)組接口,對于Python 2.6或更高版本,還會導(dǎo)出新的緩沖區(qū)接口。
可以從OGG音頻文件或未壓縮的 WAV 文件加載聲音。
注意:緩沖區(qū)將在內(nèi)部復(fù)制,不會在它與Sound對象之間共享數(shù)據(jù)。
目前緩沖區(qū)和數(shù)組支持與sndarray.make_sound 數(shù)值數(shù)組一致,因為忽略了樣本符號和字節(jié)順序。這將通過正確處理符號和字節(jié)順序或在不同時引發(fā)異常來改變。此外,截斷源樣本以適合音頻樣本大小。這不會改變。
pygame.mixer.Sound(buffer)是pygame 1.8中新增的pygame.mixer.Sound關(guān)鍵字參數(shù)和數(shù)組接口支持pygame 1.9.2中的新功能。
play()開始播放聲音
play(loops=0, maxtime=0, fade_ms=0) -> Channel
在可用頻道上開始播放聲音(即,在計算機的揚聲器上)。?這將強制選擇一個頻道,因此如有必要,播放可能會切斷當(dāng)前正在播放的聲音。
loops參數(shù)控制第一次播放后樣本重復(fù)的次數(shù)。值 5 表示聲音將播放一次,然后重復(fù)播放五次,因此共播放六次。默認(rèn)值(0)表示聲音不重復(fù),因此只播放一次。如果循環(huán)設(shè)置為-1,則Sound將無限循環(huán)(但是您仍然可以調(diào)用stop()來停止它)。
maxtime參數(shù)可用于在給定的毫秒數(shù)后停止播放。
fade_ms參數(shù)將使聲音以0音量開始播放,并在給定時間內(nèi)逐漸升至全音量。樣本可以在淡入完成之前結(jié)束。
這將返回所選通道的Channel對象。
stop()停止聲音播放
stop() -> None
這將停止在任何活動頻道上播放此聲音。
fadeout()淡出后停止聲音播放
fadeout(time) -> None
這將在以毫秒為單位在時間參數(shù)上淡出后停止播放聲音。Sound會在所有播放的頻道上消失并停止。
set_volume()設(shè)置此聲音的播放音量
set_volume(value) -> None
這將設(shè)置此聲音的播放音量(響度)。如果正在播放,這將立即影響聲音。它也會影響此聲音的任何未來播放。參數(shù)是從0.0到1.0的值。
get_volume()獲取播放音量
get_volume() -> value
返回0.0到1.0之間的值,表示此Sound的音量。
get_num_channels()計算此聲音播放的次數(shù)
get_num_channels() -> count
返回此聲音正在播放的活動頻道數(shù)。
get_length()得到聲音的長度
get_length() -> seconds
以秒為單位返回此聲音的長度。
get_raw()返回Sound樣本的bytestring副本。
get_raw() -> bytes
將Sound對象緩沖區(qū)的副本作為字節(jié)(對于Python 3.x)或str(對于Python 2.x)對象返回。
pygame 1.9.2中的新功能。
類pygame.mixer.Channel創(chuàng)建一個Channel對象來控制播放
Channel(id) -> Channel
-
pygame.mixer.Channel.play? ? ? ? -? ? ? ? 在特定頻道播放聲音
-
pygame.mixer.Channel.stop ? ? ? ?- ? ? ? ?停止在頻道上播放
-
pygame.mixer.Channel.pause ? ? ? ?- ? ? ? ?暫時停止播放頻道
-
pygame.mixer.Channel.unpause ? ? ? ?- ? ? ? ?恢復(fù)暫停播放頻道
-
pygame.mixer.Channel.fadeout ? ? ? ?- ? ? ? ?淡出通道后停止播放
-
pygame.mixer.Channel.set_volume ? ? ? ?- ? ? ? ?設(shè)置播放頻道的音量
-
pygame.mixer.Channel.get_volume ? ? ? ?- ? ? ? ?獲得播放頻道的音量
-
pygame.mixer.Channel.get_busy ? ? ? ?- ? ? ? ?檢查通道是否處于活動狀態(tài)
-
pygame.mixer.Channel.get_sound ? ? ? ?- ? ? ? ?得到當(dāng)前播放的聲音
-
pygame.mixer.Channel.queue ? ? ? ?- ? ? ? ?排隊Sound對象以跟隨當(dāng)前
-
pygame.mixer.Channel.get_queue ? ? ? ?- ? ? ? ?返回排隊的任何聲音
-
pygame.mixer.Channel.set_endevent ? ? ? ?- ? ? ? ?播放停止時讓頻道發(fā)送事件
-
pygame.mixer.Channel.get_endevent ? ? ? ?- ? ? ? ?獲取播放停止時頻道發(fā)送的事件
返回其中一個當(dāng)前通道的Channel對象。id必須是從0到 值pygame.mixer.get_num_channels() 的值。
Channel對象可用于精確控制Sounds的播放。一個頻道只能播放一個聲音。使用頻道完全是可選的,因為pygame默認(rèn)可以管理它們。
play()在特定頻道上播放聲音
play(Sound, loops=0, maxtime=0, fade_ms=0) -> None
這將開始播放特定頻道上的聲音。?如果頻道正在播放任何其他聲音,它將被停止。
loops參數(shù)與Sound.play()中的含義相同:它是第一次重復(fù)聲音的次數(shù)。?如果是3,聲音將播放4次(第一次,然后是三次)。?如果循環(huán)為-1,則播放將無限重復(fù)。
與Sound.play()一樣,maxtime參數(shù)可用于在給定的毫秒數(shù)后停止播放聲音。
與Sound.play()一樣,fade_ms參數(shù)可以在聲音中淡入淡出。
stop()停止在頻道上播放聲音
stop() -> None
停止在頻道上播放聲音。播放停止后,頻道可用于播放新的聲音。
pause()暫時停止播放頻道
pause() -> None
暫時停止在頻道上播放聲音。它可以在之后調(diào)用 Channel.unpause() 恢復(fù)
unpause()恢復(fù)暫停播放頻道
unpause() -> None
在暫停的頻道上恢復(fù)播放。
fadeout()淡出通道后停止播放
fadeout(time) -> None
在給定時間參數(shù)上淡出聲音后,以毫秒為單位停止播放通道。
set_volume()設(shè)置播放頻道的音量
set_volume(value) -> None
set_volume(left, right) -> None
設(shè)定播放聲音的音量(響度)。當(dāng)頻道開始播放時,其音量值將被重置。這只會影響當(dāng)前的聲音。value參數(shù)介于0.0和1.0之間。
如果傳遞一個參數(shù),則它將是兩個發(fā)言者的音量。如果傳遞兩個參數(shù)并且混音器處于立體聲模式,則第一個參數(shù)將是左揚聲器的音量,第二個參數(shù)將是右揚聲器的音量。(如果第二個參數(shù)為None,則第一個參數(shù)將是兩個揚聲器的音量。)
如果頻道正在播放set_volume()已調(diào)用的聲音,則會同時考慮這兩個呼叫。例如:
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
返回當(dāng)前播放聲音的通道音量。這沒有考慮到使用的立體聲分離 Channel.set_volume()。Sound對象也有自己的音量,與音頻混合。
get_busy()檢查通道是否處于活動狀態(tài)
get_busy() -> bool
如果通道正在主動混合聲音,則返回true。如果通道空閑,則返回False。
get_sound()得到當(dāng)前播放的聲音
get_sound() -> Sound
返回當(dāng)前在此頻道上播放的實際Sound對象。如果通道空閑,則返回None。
queue()排隊Sound對象以跟隨當(dāng)前
queue(Sound) -> None
當(dāng)聲音在頻道上排隊時,它將在當(dāng)前聲音結(jié)束后立即開始播放。每個通道一次只能排隊一個聲音。排隊的聲音僅在當(dāng)前播放自動結(jié)束時播放。在對Channel.stop()或的任何其他呼叫中清除它 Channel.play()。
如果在頻道上沒有主動播放聲音,則聲音將立即開始播放。
get_queue()返回排隊的任何聲音
get_queue() -> Sound
如果聲音已在此頻道上排隊,則會返回該聲音。一旦排隊的聲音開始播放,它將不再在隊列中。
set_endevent()播放停止時讓頻道發(fā)送事件
set_endevent() -> None
set_endevent(type) -> None
當(dāng)為某個頻道設(shè)置了一個嘗試時,每當(dāng)一個聲音在該頻道上播放時(不僅僅是第一次),它就會向一個游戲隊列發(fā)送一個事件。使用pygame.event.get()一旦它發(fā)送到檢索ENDEVENT。
請注意,如果您調(diào)用Sound.play(n)或Channel.play(sound,n),結(jié)束事件僅發(fā)送一次:聲音播放“n + 1”次后(請參閱Sound.play文檔)。
如果在聲音仍然播放時調(diào)用Channel.stop()或Channel.play()調(diào)用,則會立即發(fā)布事件。
type參數(shù)將是發(fā)送到隊列的事件id。這可以是任何有效的事件類型,但一個好的選擇是pygame.locals.USEREVENT和之間的值 pygame.locals.NUMEVENTS。如果沒有給出類型參數(shù),那么Channel將停止發(fā)送事件。
get_endevent()獲取播放停止時頻道發(fā)送的事件
get_endevent() -> type
返回每次Channel完成聲音播放時要發(fā)送的事件類型。如果沒有功能返回該功能 pygame.NOEVENT。
10.mouse模塊
pygame.mousePygame 中與鼠標(biāo)工作相關(guān)的模塊。
函數(shù)
-
pygame.mouse.get_pressed() ?—— ?獲取鼠標(biāo)按鍵的情況(是否被按下)
-
pygame.mouse.get_pos() ?—— ?獲取鼠標(biāo)光標(biāo)的位置
-
pygame.mouse.get_rel() ?—— ?獲取鼠標(biāo)一系列的活動
-
pygame.mouse.set_pos() ?—— ?設(shè)置鼠標(biāo)光標(biāo)的位置
-
pygame.mouse.set_visible() ?—— ?隱藏或顯示鼠標(biāo)光標(biāo)
-
pygame.mouse.get_focused() ?—— ?檢查程序界面是否獲得鼠標(biāo)焦點
-
pygame.mouse.set_cursor() ?—— ?設(shè)置鼠標(biāo)光標(biāo)在程序內(nèi)的顯示圖像
-
pygame.mouse.get_cursor() ?—— ?獲取鼠標(biāo)光標(biāo)在程序內(nèi)的顯示圖像
這些函數(shù)可以用于獲取目前鼠標(biāo)設(shè)備的情況,也可以改變鼠標(biāo)在程序內(nèi)的顯示光標(biāo)。
當(dāng)設(shè)置顯示模式之后,事件隊列將開始接收鼠標(biāo)事件。當(dāng)鼠標(biāo)按鍵被按下時會產(chǎn)生 pygame.MOUSEBUTTONDOWN 事件,當(dāng)鼠標(biāo)按鍵被松開時會產(chǎn)生 pygame.MOUSEBUTTONUP 事件。這些事件包含了一個按鍵屬性,用于表示具體由哪個按鍵所觸發(fā)。
當(dāng)鼠標(biāo)滑輪被滾動時也會產(chǎn)生 pygame.MOUSEBUTTONDOWN 和 pygame.MOUSEBUTTONUP 事件。當(dāng)鼠標(biāo)滑輪往上滾動時,按鍵將會被設(shè)置成4;當(dāng)鼠標(biāo)滑輪向下滾動時,按鍵會被設(shè)置成 5。
任何時候鼠標(biāo)移動都會產(chǎn)生一個 pygame.MOUSEMOTION 事件。鼠標(biāo)的活動被拆分成小而精確的事件。當(dāng)鼠標(biāo)運動時,大量的運動事件會被放入相應(yīng)的隊列中等待處理。沒有及時清除掉一些運動事件是隊列被塞滿的主要原因。
如果鼠標(biāo)光標(biāo)被隱藏并且輸入被當(dāng)前顯示器占用,鼠標(biāo)會進(jìn)入虛擬輸入模式,在此模式內(nèi),鼠標(biāo)的相關(guān)活動不會因為屏幕的邊界限制而停止。調(diào)用 pygame.mouse.set_visible() 方法和 pygame.event.set_grab()? 方法進(jìn)行設(shè)置。
函數(shù)詳解pygame.mouse.get_pressed()獲取鼠標(biāo)按鍵的情況(是否被按下)。
get_pressed() -> (button1, button2, button3)
返回一個由布爾值組成的列表,代表所有鼠標(biāo)按鍵被按下的情況。True 意味著在調(diào)用此方法時該鼠標(biāo)按鍵正被按下。
注意1:獲取所有的鼠標(biāo)事件最好是使用 pygame.event.wait()?方法或者 pygame.event.get()?方法,然后檢查確認(rèn)所有事件是 MOUSEBUTTONDOWN、MOUSEBUTTONUP 或者 MOUSEMOTION。
注意2:在 X11 上一些 XServers 使用中間按鍵仿真機制。當(dāng)你同時點擊按鍵 1 和 3 時會發(fā)出一個按鍵 2 被按下的事件。
注意3:在使用此方法前記住要先調(diào)用 pygame.event.get()?方法,否則此方法將不會工作。
pygame.mouse.get_pos() 獲取鼠標(biāo)光標(biāo)的位置。
get_pos() -> (x, y)
返回鼠標(biāo)光標(biāo)的坐標(biāo) (x, y)。這個坐標(biāo)以窗口左上角為基準(zhǔn)點。光標(biāo)位置可以被定位于窗口之外,但是通常被強制性限制在屏幕內(nèi)。
pygame.mouse.get_rel()獲取鼠標(biāo)一系列的活動。
get_rel() -> (x, y)
返回在調(diào)用此方法之前的一系列活動坐標(biāo) (x, y)。鼠標(biāo)光標(biāo)的相關(guān)活動被限制在屏幕范圍內(nèi),但是通過虛擬輸入模式可以突破這個限制。此頁面的頂部有虛擬輸入模式的描述。
pygame.mouse.set_pos()設(shè)置鼠標(biāo)光標(biāo)的位置。
set_pos([x, y]) -> None
通過提供相應(yīng)的參數(shù)來設(shè)置當(dāng)前鼠標(biāo)的位置。如果鼠標(biāo)光標(biāo)是可視的,則光標(biāo)將會跳到新的坐標(biāo)上。移動鼠標(biāo)將會產(chǎn)生一個新的 pygame.MOUSEMOTION 事件。
pygame.mouse.set_visible()隱藏或顯示鼠標(biāo)光標(biāo)。
set_visible(bool) -> bool
如果返回的布爾值為 True,鼠標(biāo)光標(biāo)將會是可視的。返回光標(biāo)在調(diào)用該方法之前的可視化情況。
pygame.mouse.get_focused()檢查程序界面是否獲得鼠標(biāo)焦點。
get_focused() -> bool
當(dāng) pygame 正在接受鼠標(biāo)輸入事件(或者用專業(yè)術(shù)語說,鼠標(biāo)正在處于“active”或“focus”狀態(tài))返回值為 True。
一般情況下此方法用于窗口模式。在全屏模式下,該方法總會返回 True。
注意:在 MS Windows 系統(tǒng)中,一個窗口可以同時對鼠標(biāo)和鍵盤事件保持監(jiān)聽。但是在 X-Windows 系統(tǒng)中,需要用一個窗口監(jiān)聽鼠標(biāo)事件而另一個窗口監(jiān)聽鍵盤事件。pygame.mouse.get_focused() 可以表示 pygame 窗口是否在接收鼠標(biāo)事件。
pygame.mouse.set_cursor()設(shè)置鼠標(biāo)光標(biāo)在程序內(nèi)的顯示圖像。
set_cursor(size, hotspot, xormasks, andmasks) -> None
當(dāng)鼠標(biāo)光標(biāo)是可視的時,它將通過我們提供的位掩碼數(shù)組顯示為一個黑白色的位圖。size 指定光標(biāo)的寬度和高度。hotspot 指定光標(biāo)的熱點位置。xormasks 指定一組字節(jié),用于進(jìn)行按位異或掩碼的計算。andmasks 指定一組字節(jié),用于進(jìn)行按位與掩碼的計算。
光標(biāo)的寬度必須是 8 的倍數(shù),并且提供的位掩碼數(shù)組必須與寬度、高度匹配。否則將拋出異常。
關(guān)于如何創(chuàng)建一個系統(tǒng)光標(biāo),請查看 pygame.cursor 模塊。
pygame.mouse.get_cursor()獲取鼠標(biāo)光標(biāo)在程序內(nèi)的顯示圖像。
get_cursor() -> (size, hotspot, xormasks, andmasks)
11.Rect對象
class pygame.RectRect 是用于存儲矩形坐標(biāo)的 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() ?— ?按照一定的寬高比調(diào)整 Rect 對象
-
pygame.Rect.normalize() ?— ?翻轉(zhuǎn) Rect 對象(如果尺寸為負(fù)數(shù))
-
pygame.Rect.contains() ?— ?檢測一個 Rect 對象是否完全包含在該 Rect 對象內(nèi)
-
pygame.Rect.collidepoint() ?— ?檢測一個點是否包含在該 Rect 對象內(nèi)
-
pygame.Rect.colliderect() ?— ?檢測兩個 Rect 對象是否重疊
-
pygame.Rect.collidelist() ?— ?檢測該 Rect 對象是否與列表中的任何一個矩形有交集
-
pygame.Rect.collidelistall() ?— ?檢測該 Rect 對象與列表中的每個矩形是否有交集
-
pygame.Rect.collidedict() ?— ?檢測該 Rect 對象是否與字典中的任何一個矩形有交集
-
pygame.Rect.collidedictall() ?— ?檢測該 Rect 對象與字典中的每個矩形是否有交集
Pygame 通過 Rect 對象存儲和操作矩形區(qū)域。一個 Rect 對象可以由 left,top,width,height 幾個值創(chuàng)建。Rect 也可以是由 Pygame 的對象所創(chuàng)建,它們擁有一個屬性叫“rect”。
任何需要一個 Rect 對象作為參數(shù)的 Pygame 函數(shù)都可以使用以上值構(gòu)造一個 Rect。這樣使得作為參數(shù)傳遞的同時創(chuàng)建 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 屬性賦值將改變矩形的尺寸;給其它屬性賦值將移動矩形。注意:一些屬性是整數(shù),一些是整數(shù)對。
如果一個 Rect 對象的 width 或 height 非 0,那么將在非 0 測試中返回 True。一些方法返回尺寸為 0 的 Rect 對象,用于表示一個非法的矩形。
Rect 對象的坐標(biāo)都是整數(shù),size 的值可以是負(fù)數(shù),但在大多數(shù)情況下被認(rèn)為是非法的。
還有一些方法可以實現(xiàn)矩形間碰撞檢測,大多數(shù) 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 參數(shù)可以是正數(shù)或負(fù)數(shù),用于指定新對象的偏移地址。
move_ip()原地移動 Rect 對象。
move_ip(x, y) -> None
效果跟 move() 方法一樣,區(qū)別是這個直接作用于當(dāng)前 Rect 對象,而不是返回一個新的。
inflate()放大和縮小 Rect 對象的尺寸。
inflate(x, y) -> Rect
返回一個新的 Rect 對象。x 和 y 參數(shù)指定新的對象放大或縮小多少像素。新的對象保持與原始 Rect 對象在同一個中心上。
inflate_ip()原地放大和縮小 Rect 對象的尺寸。
inflate_ip(x, y) -> None
效果跟 inflate() 方法一樣,區(qū)別是這個直接作用于當(dāng)前 Rect 對象,而不是返回一個新的。
clamp()將一個 Rect 對象移動到另一個 Rect 對象的中心。
clamp(Rect) -> Rect
返回一個新的 Rect 對象,范圍是以 Rect 參數(shù)指定的對象為中心,保持原始 Rect 對象的尺寸不變。如果原始 Rect 對象的尺寸比 Rect 參數(shù)的要大,那么保持中心重疊,尺寸不變。
clamp_ip()原地將一個 Rect 對象移動到另一個 Rect 對象的中心。
clamp_ip(Rect) -> None
效果跟 clamp() 方法一樣,區(qū)別是這個直接作用于當(dāng)前 Rect 對象,而不是返回一個新的。
clip()獲取兩個 Rect 對象互相重疊的部分。
clip(Rect) -> Rect
返回一個新的 Rect 對象,范圍是原始 Rect 對象與 Rect 參數(shù)指定的對象互相重疊的部分。如果兩個 Rect 對象沒有任何重疊,則返回一個 (0, 0, 0, 0) 的 Rect 對象。
union()將兩個 Rect 對象合并。
union(Rect) -> Rect
返回一個新的 Rect 對象,范圍將包含原始 Rect 對象與 Rect 參數(shù)指定的對象。由于結(jié)果返回一個新的矩形,所以會產(chǎn)生一些多與的空間。
union_ip()原地將兩個 Rect 對象合并。
union_ip(Rect) -> None
效果跟 union() 方法一樣,區(qū)別是這個直接作用于當(dāng)前 Rect 對象,而不是返回一個新的。
unionall()將多個 Rect 對象合并。
unionall(Rect_sequence) -> Rect
返回一個新的 Rect 對象,范圍將包含 Rect_sequence 參數(shù)指定的序列中所有的 Rect 對象。
unionall_ip()原地將多個 Rect 對象合并。
unionall_ip(Rect_sequence) -> None
效果跟 unionall() 方法一樣,區(qū)別是這個直接作用于當(dāng)前 Rect 對象,而不是返回一個新的。
fit()按照一定的寬高比調(diào)整 Rect 對象。
fit(Rect) -> Rect
返回一個新的 Rect 對象,范圍是 Rect 參數(shù)的對象按照原始 Rect 對象的寬高比調(diào)整得來。
normalize()翻轉(zhuǎn) Rect 對象(如果尺寸為負(fù)數(shù))。
normalize() -> None
如果 width 或 height 存在負(fù)數(shù),則做出相應(yīng)的翻轉(zhuǎn),使其變?yōu)檎龜?shù)。翻轉(zhuǎn)后的 Rect 仍然在原來的位置,只是修改其相應(yīng)的屬性值。
contains()檢測一個 Rect 對象是否完全包含在該 Rect 對象內(nèi)。
contains(Rect) -> bool
如果 Rect 參數(shù)指定的對象完全包含在該 Rect 對象內(nèi),返回 True,否則返回 False。
collidepoint()檢測一個點是否包含在該 Rect 對象內(nèi)。
collidepoint(x, y) -> bool
collidepoint((x,y)) -> bool
如果給定的點在該 Rect 對象內(nèi),返回 True,否則返回 False。
一個點在 Rect 的 right 或 bottom 邊緣上時,并不被認(rèn)為包含在該矩形內(nèi)。
colliderect()檢測兩個 Rect 對象是否重疊。
colliderect(Rect) -> bool
如果兩個 Rect 對象有任何重疊的地方,返回 True,否則返回 False。
注意:right 和 bottom 指定的邊緣位置并不屬于對應(yīng)的矩形。
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 中用于監(jiān)控時間的模塊。
函數(shù)
-
pygame.time.get_ticks()? ——? 獲取以毫秒為單位的時間
-
pygame.time.wait()??——??暫停程序一段時間
-
pygame.time.delay()??——??暫停程序一段時間
-
pygame.time.set_timer()??——??在事件隊列上重復(fù)創(chuàng)建一個事件
-
pygame.time.Clock()??——??創(chuàng)建一個對象來幫助跟蹤時間
-
Pygame中的時間以毫秒(1/1000秒)表示。大多數(shù)平臺的時間分辨率有限,大約為10毫秒。該分辨率(以毫秒為單位) 以常量 TIMER_RESLUTION 給出。
函數(shù)詳解pygame.time.get_ticks()獲取以毫秒為單位的時間
get_ticks() -> milliseconds
返回自 pygame_init() 調(diào)用以來的毫秒數(shù)。在pygame初始化之前,這將始終為0。
**pygame.time.wait()?** 暫停程序一段時間
wait(milliseconds) -> time
將暫停一段給定的毫秒數(shù)。此函數(shù)會暫停進(jìn)程以與其他程序共享處理器。等待幾毫秒的程序?qū)⑾姆浅I俚奶幚砥鲿r間。它比pygame.time.delay() 函數(shù)稍微準(zhǔn)確一些。
這將返回實際使用的毫秒數(shù)。
**pygame.time.delay()?** 暫停程序一段時間
delay(milliseconds) -> time
將暫停一段給定的毫秒數(shù)。此功能將使用處理器(而不是休眠),使用 pygame.time.wait()?以使延遲更準(zhǔn)確。
這將返回實際使用的毫秒數(shù)。
**pygame.time.set_timer()?** 在事件隊列上重復(fù)創(chuàng)建一個事件
set_timer(eventid, milliseconds) -> None
將事件類型設(shè)置為每隔給定的毫秒數(shù)顯示在事件隊列中。第一個事件將在經(jīng)過一段時間后才會出現(xiàn)。
每種事件類型都可以附加一個單獨的計時器。在 pygame.USEREVENT 和 pygame.NUMEVENTS 中使用該值更好。
要禁用事件的計時器,請將milliseconds參數(shù)設(shè)置為0。
**pygame.time.Clock()?** 創(chuàng)建一個對象來幫助跟蹤時間
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()??——??計算時鐘幀率 創(chuàng)建一個新的Clock對象,可用于跟蹤一段時間。時鐘還提供了幾個功能來幫助控制游戲的幀速率。
tick()更新時鐘
tick(framerate=0) -> milliseconds
注:
應(yīng)該每幀調(diào)用一次此方法。它將計算自上一次調(diào)用以來經(jīng)過的毫秒數(shù)。
如果傳遞可選的幀率參數(shù),該函數(shù)將延遲以使游戲運行速度低于每秒給定的滴答數(shù)。這可以用于幫助限制游戲的運行時速度。通過每幀調(diào)用?一次 Clock.tick(40),程序?qū)⒂肋h(yuǎn)不會超過每秒40幀。
請注意,此函數(shù)使用SDL_Delay函數(shù),該函數(shù)在每個平臺上都不準(zhǔn)確,但不會占用太多CPU。如果你想要一個準(zhǔn)確的計時器,請使用tick_busy_loop,并且不介意咀嚼CPU。
tick_busy_loop()更新時鐘
tick_busy_loop(framerate=0) -> milliseconds
注:
應(yīng)該每幀調(diào)用一次此方法。它將計算自上一次調(diào)用以來經(jīng)過的毫秒數(shù)。
如果您傳遞可選的幀率參數(shù),該函數(shù)將延遲以使游戲運行速度低于每秒給定的滴答數(shù)。這可以用于幫助限制游戲的運行時速度。通過每幀調(diào)用?一次 Clock.tick_busy_ioop(40),程序?qū)⒂肋h(yuǎn)不會超過每秒40幀。
請注意,此函數(shù)使用 pygame.time.delay(,在繁忙的循環(huán)中使用大量CPU以確保時間更準(zhǔn)確。
pygame 1.8.0中的新功能。
get_time()? 在上一個tick中使用的時間
get_time() -> milliseconds
前兩次調(diào)用 Clock.tick() 之間傳遞的毫秒數(shù)。
get_rawtime()? 在上一個tick中使用的實際時間
get_rawtime() -> milliseconds
類似于 Clock.get_time(),但不包括? Clock.tick() 延遲限制幀速率時使用的任何時間。
get_fps()
計算時鐘幀率
get_fps() -> float
計算游戲的幀速率(以每秒幀數(shù)為單位)。它是通過平均最后十次調(diào)用來計算的? Clock.tick() 。
14.music模塊
pygame.mixer.music Pygame 中控制音頻流的模塊。
函數(shù)
-
pygame.mixer.music.load() ?—— ?載入一個音樂文件用于播放
-
pygame.mixer.music.play() ?—— ?開始播放音樂流
-
pygame.mixer.music.rewind() ?—— ?重新開始播放音樂
-
pygame.mixer.music.stop() ?—— ?結(jié)束音樂播放
-
pygame.mixer.music.pause() ?—— ?暫停音樂播放
-
pygame.mixer.music.unpause() ?—— ?恢復(fù)音樂播放
-
pygame.mixer.music.fadeout() ?—— ?淡出的效果結(jié)束音樂播放
-
pygame.mixer.music.set_volume() ?—— ?設(shè)置音量
-
pygame.mixer.music.get_volume() ?—— ?獲取音量
-
pygame.mixer.music.get_busy() ?—— ?檢查是否正在播放音樂
-
pygame.mixer.music.set_pos() ?—— ?設(shè)置播放的位置
-
pygame.mixer.music.get_pos() ?—— ?獲取播放的位置
-
pygame.mixer.music.queue() ?—— ?將一個音樂文件放入隊列中,并排在當(dāng)前播放的音樂之后
-
pygame.mixer.music.set_endevent() ?—— ?當(dāng)播放結(jié)束時發(fā)出一個事件
-
pygame.mixer.music.get_endevent() ?—— ?獲取播放結(jié)束時發(fā)送的事件
Pygame 中播放音樂的模塊和 pygame.mixer 模塊是密切聯(lián)系的。使用音樂模塊去控制在調(diào)音器上的音樂播放。
音樂(music)播放和聲音(sound)播放的不同之處在于音樂是流式的,并且絕對不會在一開始就把一個音樂文件全部載入。調(diào)音系統(tǒng)在工作剛開始時僅支持單音樂流。
注意:對于 MP3 格式的支持是受限制的。在一些系統(tǒng)上,一種不受支持的格式將會是系統(tǒng)崩潰,例如 Debian Linux。為了游戲的穩(wěn)定性,建議使用 OGG 進(jìn)行替代。
函數(shù)詳解pygame.mixer.music.load()載入一個音樂文件用于播放。
load(filename) -> None
load(object) -> None
該函數(shù)將會載入一個音樂文件名或者文件對象,并且準(zhǔn)備播放。如果已經(jīng)有音樂流正在播放,該音樂流將被停止。另外,函數(shù)不會開始播放音樂。
pygame.mixer.music.play()開始播放音樂流。
play(loops=0, start=0.0) -> None
該函數(shù)用于播放已載入的音樂流。如果音樂已經(jīng)開始播放,則將會重新開始播放。
loops 參數(shù)控制重復(fù)播放的次數(shù),例如 play(5) 意味著被載入的音樂將會立即開始播放 1 次并且再重復(fù) 5 次,共 6 次。如果 loops = -1,則表示無限重復(fù)播放。
start 參數(shù)控制音樂從哪里開始播放。開始的位置取決于音樂的格式。MP3 和 OGG 使用時間表示播放位置(以秒為單位)。MOD使用模式順序編號表示播放位置。如果音樂文件無法設(shè)置開始位置,則傳遞了start參數(shù)后會產(chǎn)生一個NotImplementedError 錯誤。
pygame.mixer.music.rewind()重新開始播放音樂。
rewind() -> None
從文件開頭開始重新播放音樂。
pygame.mixer.music.stop()結(jié)束音樂播放。
stop() -> None
如果音樂正在播放則立即結(jié)束播放。
pygame.mixer.music.pause()暫停音樂流的播放。
pause() -> None
通過調(diào)用 pygame.mixer.music.unpause() 函數(shù)繼續(xù)播放音樂。
pygame.mixer.music.unpause()恢復(fù)音樂播放。
unpause() -> None
在播放暫停后使用該函數(shù)可以繼續(xù)音樂流的播放。
pygame.mixer.music.fadeout()淡出的效果結(jié)束音樂播放。
fadeout(time) -> None
該函數(shù)將會在音樂淡出(也就是不在有聲音放出)一段指定長度的時間(以毫秒為單位)后結(jié)束播放。
注意:該函數(shù)在調(diào)用后會一直處于阻塞狀態(tài),直到音樂已經(jīng)淡出。
pygame.mixer.music.set_volume()設(shè)置音量。
set_volume(value) -> None
設(shè)置音樂的播放音量。
value 參數(shù)值范圍為 0.0~1.0。當(dāng)新的音樂文件被載入,音量會被重置。
pygame.mixer.music.get_volume()獲取音量。
get_volume() -> value
返回正在播放的音樂的音量(此音量應(yīng)該是調(diào)音器音量,注意與其他音量參數(shù)區(qū)分)。返回值范圍為 0.0~1.0。
pygame.mixer.music.get_busy()檢查是否正在播放音樂。
get_busy() -> bool
如果有音樂流正在播放,此方法返回 True。否則返回 False。
pygame.mixer.music.set_pos()設(shè)置播放的位置。
set_pos(pos) -> None
設(shè)置播放的起始位置。pos 參數(shù)是一個浮點數(shù)(或者一個可以轉(zhuǎn)換為浮點數(shù)的數(shù)值),其值取決于音樂文件的格式:
對于 MOD 文件,它是模塊中的整型模式號;對于 OGG 文件,它是一個以音頻開頭為零點的絕對時間值(以秒為單位);對于 MP3 文件,它是以當(dāng)前播放位置為零點的絕對時間值(以秒為單位)。為了對一個 MP3 文件的進(jìn)行絕對定位,建議首先調(diào)用 rewind() 函數(shù)(其他文件格式不受支持)。SDL_mixer 更新的版本提供了更好的定位支持。如果一種特殊的格式不支持定位,將會產(chǎn)生一個 SDLError 錯誤。
該函數(shù)會調(diào)用 SDL_mixer 內(nèi)的 Mix_SetMusicPosition() 函數(shù)。
pygame.mixer.music.get_pos()獲取播放的位置。
get_pos() -> time
此函數(shù)會獲得音樂的播放時長(以毫秒為單數(shù)的數(shù)值)。返回值僅代表已經(jīng)音樂已經(jīng)播放了多久,并不考慮任何起始位置偏移量。
pygame.mixer.music.queue()將一個音樂文件放入隊列中,并排在當(dāng)前播放的音樂之后。
queue(filename) -> None
此函數(shù)將會載入一個音樂文件并將其放入隊列中。當(dāng)前的音樂一旦播放完畢,正在排隊的音樂文件就會開始播放。如果當(dāng)前音樂被人為停止或者切換到其他音樂,則正在排隊的音樂會被丟棄。
下面的示例意思是先播放 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()
當(dāng)播放結(jié)束時發(fā)出一個事件。
set_endevent() -> None
set_endevent(type) -> None
調(diào)用此函數(shù)會使 Pygame 在音樂結(jié)束播放后發(fā)出信號(通過事件隊列)。
type 參數(shù)決定了什么樣的事件將被放入事件隊列中。
任何時候音樂結(jié)束,都會放入指定事件到隊列中(不僅僅是第一次)。調(diào)用該函數(shù)并不帶任何參數(shù),表示停止投放事件到隊列中。
pygame.mixer.music.get_endevent()獲取播放結(jié)束時發(fā)送的事件。
get_endevent() -> type
返回音樂結(jié)束時被放入隊列的事件類型。
如果沒有指定 endevent 事件,此方法會返回 pygame.NOEVENT 。
15.pygame模塊
pygamePygame 最頂層的包。
函數(shù) & 屬性
-
pygame.init() ?— ?初始化所有導(dǎo)入的 pygame 模塊
-
pygame.quit() ?— ?卸載所有導(dǎo)入的 pygame 模塊
-
pygame.error() ?— ?標(biāo)準(zhǔn) pygame 異常模塊
-
pygame.get_error() ?— ?獲得當(dāng)前錯誤信息
-
pygame.set_error() ?— ?設(shè)置當(dāng)前錯誤信息
-
pygame.get_sdl_version() ?— ?獲得 SDL 的版本號
-
pygame.get_sdl_byteorder() ?— ?獲得 SDL 的字節(jié)順序
-
pygame.register_quit() ?— ?注冊一個函數(shù),這個函數(shù)將在 pygame 退出時被調(diào)用
-
pygame.encode_string() ?— ?對 unicode 或字節(jié)對象編碼
-
pygame.encode_file_path() ?— ?將 unicode 或字節(jié)對象編碼為文件系統(tǒng)路徑
-
pygame 包是可供使用的最頂層的包。Pygame 被分成許多子模塊,但是并不會影響程序使用 Pygame。
為了方便,在 pygame 中絕大多數(shù)的頂級變量被放入名為“pygame.locals”的模塊中。意思是說這些變量可通過以下方式導(dǎo)入:
import pygame from pygame.locals import * 當(dāng)你導(dǎo)入 pygame 后,所有可用的 pygame 子模塊都將自動被導(dǎo)入。需要注意的是,一些 pygame 模塊是“可選的”,并且可能無法使用。以防萬一,Pygame 將提供了一個占位符對象替代原來的模塊,這個對象可用來測試某些功能(變量)是否可用。
函數(shù) & 屬性詳解pygame.init()初始化所有導(dǎo)入的 pygame 模塊。
init() -> (numpass, numfail)
初始化所有導(dǎo)入的 pygame 模塊,如果有模塊導(dǎo)入失敗也不會顯示異常,但是將返回一個元組,第一個元素為成功導(dǎo)入的模塊數(shù),第二個元素為導(dǎo)入失敗的個數(shù)。
也許你想分開初始化不同的模塊,以提高你程序的運行速度,或者不加載暫時用不到的模塊。
重復(fù)調(diào)用 init() 方法是沒問題的,也不會有任何負(fù)面影響。即使你已經(jīng)調(diào)用了 pygame.quit() 卸載所有模塊也是可以的。
pygame.quit()卸載所有導(dǎo)入的 pygame 模塊。
quit() -> None
卸載所有之前被初始化的 pygame 模塊。當(dāng) python 解釋器關(guān)閉時,這個方法將被無條件地調(diào)用,所以你的程序并不需要調(diào)用這個方法,除非你想要終止 pygame 資源,并繼續(xù)執(zhí)行其他功能。多次執(zhí)行這個方法也是沒有問題的。
注意:調(diào)用這個方法 pygame.quit() 會結(jié)束所有模塊,但不會結(jié)束你的程序。建議用正常結(jié)束 python 程序的方法來結(jié)束 pygame 程序。
exception pygame.error標(biāo)準(zhǔn)的 pygame 異常。
raise pygame.error(message)
當(dāng) pygame 或 SDL 操作失敗時,將會引發(fā)異常。你可以捕獲任何可預(yù)見的問題并處理異常。報告異常時,會同時顯示問題的描述信息。
它是 RuntimeError 異常的子類,用于捕獲這些異常。
pygame.get_error()得到當(dāng)前錯誤信息。
get_error() -> errorstr
獲取 SDL 維護(hù)的一個內(nèi)部錯誤消息。當(dāng)標(biāo)準(zhǔn) pygame.error() 標(biāo)準(zhǔn) pygame 異常引發(fā)時,這些信息將會提供給你。
其實你很少會使用到這個方法的啦。
pygame.set_error()設(shè)置當(dāng)前錯誤信息。
set_error(error_msg) -> None
設(shè)置 SDL 維護(hù)的一個內(nèi)部錯誤消息。當(dāng)標(biāo)準(zhǔn) pygame.error() 標(biāo)準(zhǔn) pygame 異常引發(fā)時,這些信息將會提供給你。
其實你很少會使用到這個方法的啦。
pygame.get_sdl_version()獲得 SDL 的版本號。
get_sdl_version() -> major, minor, patch
返回 SDL 庫有關(guān)版本的 3 個數(shù)字。這個版本是在編譯時生成的。這個方法可用來得知哪個元件是不能正常使用的。
Pygame 1.7.0 新添加的方法。
pygame.get_sdl_byteorder()獲得 SDL 的字節(jié)順序。
get_sdl_byteorder() -> int
獲得 SDL 庫的字節(jié)順序。返回 LIL_ENDIAN 表示小端字節(jié)順序;返回 BIG_ENDIAN 表示大端字節(jié)順序。
Pygame 1.8 新添加的方法。
pygame.register_quit()注冊一個函數(shù),這個函數(shù)將在 pygame 退出時被調(diào)用。
register_quit(callable) -> None
當(dāng)調(diào)用 pygame.quit() 結(jié)束所有模塊時,所有通過 register_quit() 方法注冊過的函數(shù)將被調(diào)用。這一切都是自動執(zhí)行的。
一般的 pygame 用戶用不到這個方法。
pygame.encode_string()對 unicode 或字節(jié)對象進(jìn)行編碼。
encode_string([obj [, encoding [, errors [, etype]]]]) -> bytes or None
obj:
傳入 unicode 類型 -> 編碼 傳入 bytes 類型 -> 不變 傳入其他類型 -> 返回 None 沒有傳遞 obj 參數(shù) -> 引起 SyntaxError 異常 encoding (string):如果存在則進(jìn)行編碼,默認(rèn)是 unicode_escape。
errors (string):指定如何處理無法編碼的內(nèi)容,默認(rèn)使用反斜杠(\)代替。
etype (exception type):指定編碼錯誤引發(fā)的異常類型。默認(rèn)為 UnicodeEncodeError,由 PyUnicode_AsEncodedString() 返回。對于默認(rèn)的編碼和錯誤值不應(yīng)該有編碼錯誤。
這個函數(shù)被用于編碼文件路徑的時候,支持使用關(guān)鍵字參數(shù)。
Pygame 1.9.2 新增加的方法(主要用于單元測試)。
pygame.encode_file_path()將 unicode 或 bytes 對象編碼為文件系統(tǒng)路徑。
encode_file_path([obj [, etype]]) -> bytes or None
obj:
-
傳入 unicode 類型 -> 編碼
-
傳入 bytes 類型 -> 不變
-
傳入其他類型 -> 返回 None
-
沒有傳遞 obj 參數(shù) -> 引起 SyntaxError 異常 etype(異常類型):若給出,則出現(xiàn)異常時報相應(yīng)編碼錯誤,默認(rèn)為 UnicodeEncodeError,由 PyUnicode_AsEncodedString() 返回。
這個函數(shù)被用于編碼文件路徑的時候,結(jié)果由 sys.getfilesystemencoding() 返回,支持使用關(guān)鍵字參數(shù)。
參考文檔
-
Pygame官網(wǎng):https://www.pygame.org
-
Pygame的官網(wǎng)是有詳細(xì)的文檔的:https://www.pygame.org/docs/
-
pygame中文手冊pdf版本:https://yihang.cowtransfer.com/s/7b027011c9cd4a
——— / 往期精選?/ ————
后臺回復(fù)「進(jìn)群」可以加入我們的社群哦~
總結(jié)
以上是生活随笔為你收集整理的Python游戏工具包---Pygame最常用的15个模块详解(附pdf版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 活性GWT
- 下一篇: 使用密钥加密码加密_创建基于密码的加密密