【Python游戲編程03--pygame事件與設備輪詢】


一、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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM