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

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
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.DOUBLEBUF | 1. 雙緩沖模式 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 | 表示每個像素存放多少位元組 |
masks | 4 個值用于打包像素的 RGBA 值 |
shifts | |
losses | |
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_h | 1. 表示目前顯示模式的寬和高(如果在 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 支援儲存為以下格式:
- TGA
- 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 将這些數字定義為以下這些常量:
KeyASCII | ASCII | 描述 |
K_BACKSPACE | \b | 倒退鍵(Backspace) |
K_TAB | \t | 制表鍵(Tab) |
K_CLEAR | 清楚鍵(Clear) | |
K_RETURN | \r | Enter鍵(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 | ||
K_1 | 1 | |
K_2 | 2 | |
K_3 | 3 | |
K_4 | 4 | |
K_5 | 5 | |
K_6 | 6 | |
K_7 | 7 | |
K_8 | 8 | |
K_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 | |
K_b | b | |
K_c | c | |
K_d | d | |
K_e | e | |
K_f | f | |
K_g | g | |
K_h | h | |
K_i | i | |
K_j | j | |
K_k | k | |
K_l | l | |
K_m | m | |
K_n | n | |
K_o | o | |
K_p | p | |
K_q | q | |
K_r | r | |
K_s | s | |
K_t | t | |
K_u | u | |
K_v | v | |
K_w | w | |
K_x | x | |
K_y | y | |
K_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 | Enter鍵(小鍵盤) | |
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 屬性,用于描述組合鍵狀态。
以下是組合鍵的常量定義:
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()退出混音器
這将解除安裝 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()停止聲音播放
這将停止在任何活動頻道上播放此聲音。
fadeout()淡出後停止聲音播放
這将在以毫秒為機關在時間參數上淡出後停止播放聲音。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_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()停止在頻道上播放聲音
停止在頻道上播放聲音。播放停止後,頻道可用于播放新的聲音。
pause()暫時停止播放頻道
暫時停止在頻道上播放聲音。它可以在之後調用 Channel.unpause() 恢複
unpause()恢複暫停播放頻道
在暫停的頻道上恢複播放。
fadeout()淡出通道後停止播放
在給定時間參數上淡出聲音後,以毫秒為機關停止播放通道。
set_volume()設定播放頻道的音量
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()獲得播放頻道的音量
傳回目前播放聲音的通道音量。這沒有考慮到使用的立體聲分離 Channel.set_volume()。Sound對象也有自己的音量,與音頻混合。
get_busy()檢查通道是否處于活動狀态
如果通道正在主動混合聲音,則傳回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()檢查程式界面是否獲得滑鼠焦點。
當 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()結束音樂播放。
如果音樂正在播放則立即結束播放。
pygame.mixer.music.pause()暫停音樂流的播放。
通過調用 pygame.mixer.music.unpause() 函數繼續播放音樂。
pygame.mixer.music.unpause()恢複音樂播放。
在播放暫停後使用該函數可以繼續音樂流的播放。
pygame.mixer.music.fadeout()淡出的效果結束音樂播放。
該函數将會在音樂淡出(也就是不在有聲音放出)一段指定長度的時間(以毫秒為機關)後結束播放。
注意:該函數在調用後會一直處于阻塞狀态,直到音樂已經淡出。
pygame.mixer.music.set_volume()設定音量。
設定音樂的播放音量。
value 參數值範圍為 0.0~1.0。當新的音樂檔案被載入,音量會被重置。
pygame.mixer.music.get_volume()擷取音量。
傳回正在播放的音樂的音量(此音量應該是調音器音量,注意與其他音量參數區分)。傳回值範圍為 0.0~1.0。
pygame.mixer.music.get_busy()檢查是否正在播放音樂。
如果有音樂流正在播放,此方法傳回 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()
當播放結束時發出一個事件。
調用此函數會使 Pygame 在音樂結束播放後發出信号(通過事件隊列)。
type 參數決定了什麼樣的事件将被放入事件隊列中。
任何時候音樂結束,都會放入指定事件到隊列中(不僅僅是第一次)。調用該函數并不帶任何參數,表示停止投放事件到隊列中。
pygame.mixer.music.get_endevent()擷取播放結束時發送的事件。
傳回音樂結束時被放入隊列的事件類型。
如果沒有指定 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 子產品。
解除安裝所有之前被初始化的 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
- 傳入 unicode 類型 -> 編碼
- 傳入 bytes 類型 -> 不變
- 傳入其他類型 -> 傳回 None
- 沒有傳遞 obj 參數 -> 引起 SyntaxError 異常 etype(異常類型):若給出,則出現異常時報相應編碼錯誤,預設為 UnicodeEncodeError,由 PyUnicode_AsEncodedString() 傳回。
這個函數被用于編碼檔案路徑的時候,結果由 sys.getfilesystemencoding() 傳回,支援使用關鍵字參數。
參考文檔
- Pygame官網: https://www.pygame.org
- Pygame的官網是有詳細的文檔的: https://www.pygame.org/docs/