一、pygame事件
1、pygame事件可以處理游戲中的各種事情,完整的事件列表如下:
QUIT,ACTIVEEVENT,KEYDOWN,KEYDOWN,MOUSEMOTION,MOUSEBUTTONUP,MOUSEBUTTONDOWN,JOYAXISMOTION,
JOYBALLMOTION,JOYHATMOTION........
查看文檔:https://fishc.com.cn/thread-62173-1-4.html
2、事實循環事件
while True: for event in pygame.event.get(): if event.type == QUIT: sys.exit()
3、鍵盤事件
鍵盤事件包括典型的keyup和keydown,當按鍵按下的時候響應KEYDOWN事件,按鍵彈起的時候KEYUP事件,通常可以設置一個事件變量,然后根據keyup或者keydown給他賦不同的值
while True: for event in pygame.event.get(): if event.type == QUIT: sys.exit() elif event.type == KEYUP: key_flag = True elif event.type == KEYDOWN: key_flag = False
默認情況下,pygame不會重復的響應一個一直被按下的鍵,只有在第一次被按下時,才會被響應一次,如果需要重復按鍵的話執行下面的操作
pygame.key_set.repeat(10) #參數是一個以毫秒為單位的值
4、鼠標事件
pygame支持一些鼠標事件,他們包括MOUSEMOTION,MOUSEBUTTONUP,MOUSEBUTTONDOWN.
在MOUSEMOTION中包含了一些屬性:event.pos,event.rel,event.buttons
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() —— 獲取鼠標光標在程序內的顯示圖像
for event in pygame.event.get(): if event.type == MOUSEMOTION: mouse_x,mouse_y = event.pos move_x,move_y = event.rel
MOUSEBUTTONDOWN里面的屬性:
event.type == MOUSEBUTTONDOWN: mouse_down = event.button mouse_down_x,mouse_down_y = event.pos
MOUSEBUTTONUP里面的屬性:
event.type == MOUSEBUTTONUP: mouse_up = event.button mouse_up_x,mouse_up_y = event.pos
https://fishc.com.cn/thread-62179-1-4.html
二、設備輪詢
在pygame中除了pygame事件,還可以使用設備輪詢的方法來檢測是否有事件發生。而且在python里面是沒有switch語句的,因此當需要處理的事件過多時,我們肯定不會去一條一條的去寫if...elif....else來匹配,而設備輪詢正好解決了這個棘手的問題。
1、輪詢鍵盤
在pygame中,使用pygame.key.get_pressed()來輪詢鍵盤接口,這個方法會返回布爾值的一個列表,其中每個鍵一個標志。使用鍵常量值來匹配按鍵,這樣的好處就是不必遍歷時間系統就可以檢測多個鍵的按下
keys = pygame.key.get_pressed() if keys[K_ESCAPE]: pygame.quit() sys.exit()
2、輪詢鼠標
同樣,我們可以使用類似的方法去輪詢鼠標事件。
這里有3個相關的函數:
(1)pygame.mouse.get_pos(),這個函數會返回鼠標當前的坐標x,y;
(2)pygame.mouse.get_rel();
rel_x ,rel_y = pygame.mouse.get_rel().利用這個函數可以讀取鼠標的相對移動。
(3)btn_one,btn_two,btn_three = pygame.mouse.get_pressed();
利用這個函數,可以獲取鼠標按鈕的狀態。比如當左鍵按下的時候btn_one 的值會被賦值為1,鼠標按鍵彈起是會被賦值為0。