学习笔记——pygame最常用的15个模块
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.lerp() | 返回給定顏色的線性插值 |
| pygame.Color.premul_alpha() | 返回一個顏色,其中r,g,b組件已經乘以了alpha |
| pygame.Color.update() | 設置顏色的元素 |
(函數詳解見官網:https://www.pygame.org/docs/)
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() | 設置當前窗口標題 |
| pygame.display.get_caption() | 獲取當前窗口標題 |
| pygame.display.set_palette() | 為索引顯示設置顯示調色板 |
| pygame.display.get_num_displays() | 返回顯示的數量 |
| pygame.display.get_window_size() | 返回窗口或屏幕的大小 |
| pygame.display.get_allow_screensaver() | 返回屏幕保護程序是否允許運行 |
| pygame.display.set_allow_screensaver() | 設置屏幕保護程序是否可以運行 |
(函數詳解見官網:https://www.pygame.org/docs/)
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 窗口的外觀。
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() | 繪制多條連續的線段(抗鋸齒) |
(函數詳解見官網:https://www.pygame.org/docs/)
該模塊用于在 Surface 對象上繪制一些簡單的形狀。這些函數將渲染到任何格式的 Surface 對象上。硬件渲染會比普通的軟件渲染更耗時。
大部分函數用 width 參數指定圖形邊框的大小,如果 width = 0 則表示填充整個圖形。
所有的繪圖函數僅能在 Surface 對象的剪切區域生效。這些函數返回一個 Rect,表示包含實際繪制圖形的矩形區域。
大部分函數都有一個 color 參數,傳入一個表示 RGB 顏色值的三元組,當然也支持 RGBA 四元組。其中的 A 是 Alpha 的意思,用于控制透明度。不過該模塊的函數并不會繪制透明度,而是直接傳入到對應 Surface 對象的 pixel alphas 中。color 參數也可以是已經映射到 Surface 對象的像素格式中的整型像素值。
當這些函數在繪制時,必須暫時鎖定 Surface 對象。許多連續繪制的函數可以通過一次性鎖定直到畫完再解鎖來提高效率。
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 對象 |
(函數詳解見官網:https://www.pygame.org/docs/)
常規的隊列是由 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.font
Pygame 中加載和表示字體的模塊。
函數
| 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 對象 |
(函數詳解見官網:https://www.pygame.org/docs/)
通過使用現有的 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 字體模塊將會被加載用于替代。
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 對象 |
(函數詳解見官網:https://www.pygame.org/docs/)
注意:沒有 Image 類;當一個圖像被成功載入后,將轉換為 Surface 對象。Surface 對象允許你在上邊畫線、設置像素、捕獲區域等。
Image 是 Pygame 相當依賴的一個模塊,支持載入的圖像格式如下:
JPG PNG GIF(無動畫) BMP PCX TGA(無壓縮) TIF LBM(和 PBM) PBM(和 PGM,PPM) XPM支持保存為以下格式:
BMP TGA PNG JPEG7、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() | 獲取按鍵標識符對應的名字 該模塊包含處理與鍵盤操作相關的函數。 |
(函數詳解見官網:https://www.pygame.org/docs/)
pygame.KYEDOWN 事件還有個額外的屬性 unicode 和 scancode。unicode 代表一個按鍵翻譯后的 Unicode 編碼,這包含 shift 按鍵和組合鍵。scancode 是掃描碼,不同鍵盤間該值可能不同。不過這對于特殊按鍵像多媒體鍵的選擇是有用的。
溫馨提示:當鍵盤按下的時候,鍵盤會發送一個掃描碼給系統。掃描碼是鍵盤反饋哪一個按鍵被按下的方式,不同類型的鍵盤掃描碼不同。再由系統調用相應的函數將其轉換為統一的 Unicode 編碼。
key 屬性的值是一個數字,為了方便使用,Pygame 將這些數字定義為以下這些常量:
Constant 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 racket) 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 數字鍵盤鎖定鍵(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 屬性,用于描述組合鍵狀態。
以下是組合鍵的常量定義:
Constant 描述 ------------------------- KMOD_NONE 木有同時按下組合鍵 KMOD_LSHIFT 同時按下左邊的 shift 鍵 KMOD_RSHIFT 同時按下右邊的 shift 鍵 KMOD_SHIFT 同時按下 shift 鍵 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_CAPS 同時按下數字鍵盤鎖定鍵 KMOD_MODE 同時按下模式轉換鍵溫馨提示:如果 mod & KMOD_CTRL 是真的話,表示用戶同時按下了 Ctrl 鍵。
8、locals模塊
pygame.locals :Pygame 定義的常量。
這個模塊包含了 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對象來控制播放 |
(函數詳解見官網:https://www.pygame.org/docs/)
此模塊包含用于加載 Sound 對象和控制播放的類。混音器模塊是可選的,取決于SDL_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。
10、mouse模塊
pygame.mouse
Pygame 中與鼠標工作相關的模塊。
函數
| pygame.mouse.get_pressed() | 獲取鼠標按鍵的情況(是否被按下) |
| pygame.mouse.get_rel() | 獲取鼠標一系列的活動 |
| pygame.mouse.set_pos() | 設置鼠標光標的位置 |
| pygame.mouse.set_visible() | 隱藏或顯示鼠標光標 |
| pygame.mouse.get_focused() | 檢查程序界面是否獲得鼠標焦點 |
| pygame.mouse.set_cursor() | 設置鼠標光標在程序內的顯示圖像 |
| pygame.mouse.get_cursor() | 獲取鼠標光標在程序內的顯示圖像 |
(函數詳解見官網:https://www.pygame.org/docs/)
這些函數可以用于獲取目前鼠標設備的情況,也可以改變鼠標在程序內的顯示光標。
當設置顯示模式之后,事件隊列將開始接收鼠標事件。當鼠標按鍵被按下時會產生 pygame.MOUSEBUTTONDOWN 事件,當鼠標按鍵被松開時會產生 pygame.MOUSEBUTTONUP 事件。這些事件包含了一個按鍵屬性,用于表示具體由哪個按鍵所觸發。
當鼠標滑輪被滾動時也會產生 pygame.MOUSEBUTTONDOWN 和 pygame.MOUSEBUTTONUP 事件。當鼠標滑輪往上滾動時,按鍵將會被設置成4;當鼠標滑輪向下滾動時,按鍵會被設置成 5。
任何時候鼠標移動都會產生一個 pygame.MOUSEMOTION 事件。鼠標的活動被拆分成小而精確的事件。當鼠標運動時,大量的運動事件會被放入相應的隊列中等待處理。沒有及時清除掉一些運動事件是隊列被塞滿的主要原因。
如果鼠標光標被隱藏并且輸入被當前顯示器占用,鼠標會進入虛擬輸入模式,在此模式內,鼠標的相關活動不會因為屏幕的邊界限制而停止。調用 pygame.mouse.set_visible() 方法和 pygame.event.set_grab() 方法進行設置。
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 對象與字典中的每個矩形是否有交集 |
(函數詳解見官網:https://www.pygame.org/docs/)
Pygame 通過 Rect 對象存儲和操作矩形區域。一個 Rect 對象可以由 left,top,width,height 幾個值創建。Rect 也可以是由 Pygame 的對象所創建,它們擁有一個屬性叫“rect”。
任何需要一個 Rect 對象作為參數的 Pygame 函數都可以使用以上值構造一個 Rect。這樣使得作為參數傳遞的同時創建 Rect 成為可能。
Rect 對象中的大部分方法在修改矩形的位置、尺寸后會返回一個新的 Rect 拷貝,原始的 Rect 對象不會有任何改變。但有些方法比較特殊,它們會“原地”修改 Rect 對象(也就是說它們會改動原始的 Rect 對象),這些方法都會以 “ip” 作為后綴。
對了方便大家移動和對齊,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 指定的邊緣位置。
13、time模塊
pygame.time
Pygame 中用于監控時間的模塊。
函數
| pygame.time.get_ticks() | 獲取以毫秒為單位的時間 |
| pygame.time.wait() | 暫停程序一段時間 |
| pygame.time.delay() | 暫停程序一段時間 |
| pygame.time.set_timer() | 在事件隊列上重復創建一個事件 |
| pygame.time.Clock() | 創建一個對象來幫助跟蹤時間 |
(函數詳解見官網:https://www.pygame.org/docs/)
Pygame中的時間以毫秒(1/1000秒)表示。大多數平臺的時間分辨率有限,大約為10毫秒。該分辨率(以毫秒為單位) 以常量 TIMER_RESLUTION 給出。
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() | 獲取播放結束時發送的事件 |
(函數詳解見官網:https://www.pygame.org/docs/)
Pygame 中播放音樂的模塊和 pygame.mixer 模塊是密切聯系的。使用音樂模塊去控制在調音器上的音樂播放。
音樂(music)播放和聲音(sound)播放的不同之處在于音樂是流式的,并且絕對不會在一開始就把一個音樂文件全部載入。調音系統在工作剛開始時僅支持單音樂流。
注意:對于 MP3 格式的支持是受限制的。在一些系統上,一種不受支持的格式將會是系統崩潰,例如 Debian Linux。為了游戲的穩定性,建議使用 OGG 進行替代。
15、pygame模塊
pygame
Pygame 最頂層的包。
函數 & 屬性
| 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 或字節對象編碼為文件系統路徑 |
(函數詳解見官網:https://www.pygame.org/docs/)
pygame 包是可供使用的最頂層的包。Pygame 被分成許多子模塊,但是并不會影響程序使用 Pygame。
為了方便,在 pygame 中絕大多數的頂級變量被放入名為“pygame.locals”的模塊中。意思是說這些變量可通過以下方式導入:
import pygame from pygame.locals import *當你導入 pygame 后,所有可用的 pygame 子模塊都將自動被導入。需要注意的是,一些 pygame 模塊是“可選的”,并且可能無法使用。以防萬一,Pygame 將提供了一個占位符對象替代原來的模塊,這個對象可用來測試某些功能(變量)是否可用。
參考文章:
Pygame官網:https://www.pygame.org/docs/
pygame中文手冊pdf版本:https://yihang.cowtransfer.com/s/7b027011c9cd4a
總結
以上是生活随笔為你收集整理的学习笔记——pygame最常用的15个模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 学习笔记——os模块常见列表
- 下一篇: 复习(三)—— 进程管理详解