溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用pygame如何捕獲鍵盤事件

發(fā)布時(shí)間:2021-04-07 15:34:10 來源:億速云 閱讀:744 作者:Leah 欄目:開發(fā)技術(shù)

使用pygame如何捕獲鍵盤事件?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

方式1:在pygame中使用pygame.event.get()方法捕獲鍵盤事件,使用這個(gè)方式捕獲的鍵盤事件必須要是按下再彈起才算一次。
示例示例:

for event in pygame.event.get(): # 捕獲鍵盤事件
  if event.type == pygame.QUIT: # 判斷按鍵類型
    print("按下了退出按鍵")

方式2:在pygame中可以使用pygame.key.get_pressed()來返回所有按鍵元組,通過判斷鍵盤常量,可以在元組中判斷出那個(gè)鍵被按下,如果被按下則元組中就會(huì)存在這個(gè)按鍵信息。通過這樣的方式也可以捕獲到鍵盤的事件,并且不需要按下再彈起的操作,一按下就會(huì)有響應(yīng),靈活性比較高。

示例代碼:

mykeyslist = pygame.key.get_pressed() # 獲取按鍵元組信息
if mykeyslist[pygame.K_RIGHT]: # 如果按鍵按下,這個(gè)值為1
  print("按下了方向右鍵")

總結(jié):
兩種方式的比較:方式1的靈活性沒有方式2的好,如果對(duì)靈活性要求高的游戲,一般建議使用方式2。

pygame按鍵持續(xù)按下響應(yīng)

在寫一個(gè)pygame 的一個(gè)小的飛機(jī)大戰(zhàn)程序但是碰到一個(gè)小問題,僅此記錄

通過鍵盤事件操控飛機(jī)的左右移動(dòng):

elif event.type == KEYDOWN:

    # 檢測(cè)按鍵是否是a或者left
     if event.key == K_a or event.key == K_LEFT:
       plane_temp.move_left()

雖然能實(shí)現(xiàn)移動(dòng),但是每一次的移動(dòng)都需要按一下按鈕,使我感覺很難受

想實(shí)現(xiàn)可以持續(xù)按下,并且可以相應(yīng)的效果

查資料發(fā)現(xiàn)

pygame.key.set_repeat() control how held keys are repeated
set_repeat() -> None set_repeat(delay, interval) -> None When the
keyboard repeat is enabled, keys that are held down will generate
multiple pygame.KEYDOWN events. The delay is the number of
milliseconds before the first repeated pygame.KEYDOWN will be sent.
After that another pygame.KEYDOWN will be sent every interval
milliseconds. If no arguments are passed the key repeat is disabled.

When pygame is initialized the key repeat is disabled.

按鍵是默認(rèn)只能按下一次,于是就取了一個(gè)巧,查看哪些按鍵是已進(jìn)按下的,后通過循環(huán)實(shí)現(xiàn)對(duì)應(yīng)操作

key_pressed = pygame.key.get_pressed()
  if key_pressed[pygame.K_a] or key_pressed[pygame.K_LEFT]
    plane_temp.move_left()

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI