pygame實(shí)現(xiàn)鍵盤(pán)的連續(xù)監(jiān)控
pygame對(duì)鍵盤(pán)的連續(xù)監(jiān)聽(tīng),供大家參考,具體內(nèi)容如下
大家請(qǐng)看下面這一段代碼:
for event in pygame.event.get(): if event.type == pygame.QUIT: exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: print("右") if event.key == pygame.K_UP: print("上") if event.key == pygame.K_DOWN: print("下") if event.key == pygame.K_LEFT: print("左")
大家首次監(jiān)控鍵盤(pán)事件一般都會(huì)寫(xiě)出這樣的代碼我們著重來(lái)看一下對(duì)鍵盤(pán)上下左右鍵的監(jiān)控。我們運(yùn)行代碼塊我們會(huì)發(fā)現(xiàn)這幾行代碼和我們的想法是不一樣的,我們?cè)陂_(kāi)發(fā)游戲的時(shí)候,我們大部分時(shí)候希望是可以連續(xù)控制,這樣可以大大減少我們的手部疲勞,對(duì)玩家們也會(huì)非常的友好,但是我們現(xiàn)在的代碼塊,是敲一下鍵盤(pán)響應(yīng)一次事件。所以我們要對(duì)代碼進(jìn)行改進(jìn),改進(jìn)的方法有以下兩種,大家可以根據(jù)自己的理解進(jìn)行選擇。
方法一:設(shè)置中間變量
moving_r = False moving_l = False moving_u = False moving_d = False while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_RIGHT: moving_r = True if event.key == pygame.K_UP: moving_u = True if event.key == pygame.K_DOWN: moving_d = True if event.key == pygame.K_LEFT: moving_l = True elif event.type == pygame.KEYUP: if event.key == pygame.K_RIGHT: moving_r = False if event.key == pygame.K_UP: moving_u = False if event.key == pygame.K_DOWN: moving_d = False if event.key == pygame.K_LEFT: moving_l = False if moving_r: print("右") elif moving_u: print("上") elif moving_d: print("下") elif moving_l: print("左")
引入四個(gè)moving變量將四個(gè)變量的初值均設(shè)為Flase,用pygame的KEYDOWN和KEYUP方法來(lái)改變四個(gè)變量的值,以此來(lái)實(shí)現(xiàn)對(duì)鍵盤(pán)的連續(xù)監(jiān)控,這種方法雖然很好理解,但是如果是小白對(duì)代碼的重構(gòu)不是很熟悉會(huì)顯得非常綴余。
方法二:運(yùn)用pygame中g(shù)et_pressed()
# 鍵盤(pán)的連續(xù)監(jiān)聽(tīng) Key_pressed = pygame.key.get_pressed() if Key_pressed[K_UP]: print("上") if Key_pressed[K_DOWN]: print("下") if Key_pressed[K_LEFT]: print("左") if Key_pressed[K_RIGHT]: print("右")
這樣也是能連續(xù)監(jiān)聽(tīng)鍵盤(pán)事件,但是這里需要注意一下if半段語(yǔ)句后面是中括號(hào)并非是小括號(hào),第二個(gè)要注意的地方便是鍵盤(pán)名稱,如果直接輸入K_UP等是會(huì)報(bào)錯(cuò)的,有兩種解決辦法一種是導(dǎo)入pygame的方法:
from pygame import *
這樣就不會(huì)報(bào)錯(cuò)了,另一種是在K_UP 前面加上pygame如:
if Key_pressed[pygame.K_UP]: print("上")
這樣也是可行的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python中ArcPy柵格裁剪柵格(批量對(duì)齊柵格圖像范圍并統(tǒng)一行數(shù)與列數(shù))
本文介紹基于Python中ArcPy模塊,實(shí)現(xiàn)基于柵格圖像批量裁剪柵格圖像,同時(shí)對(duì)齊各個(gè)柵格圖像的空間范圍,統(tǒng)一其各自行數(shù)與列數(shù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02Python中的內(nèi)置函數(shù)isdigit()
這篇文章主要介紹了Python中的內(nèi)置函數(shù)isdigit(),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11python web應(yīng)用程序之Django數(shù)據(jù)庫(kù)詳解
這篇文章主要介紹了python web應(yīng)用程序之Django數(shù)據(jù)庫(kù),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06TensorFlow利用saver保存和提取參數(shù)的實(shí)例
今天小編就為大家分享一篇TensorFlow利用saver保存和提取參數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python基于Faker假數(shù)據(jù)構(gòu)造庫(kù)
這篇文章主要介紹了Python基于Faker假數(shù)據(jù)構(gòu)造庫(kù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python實(shí)現(xiàn)PID溫控算法的示例代碼
PID算法是一種常用的控制算法,用于調(diào)節(jié)和穩(wěn)定控制系統(tǒng)的輸出,這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)pid溫控算法,需要的可以參考下2024-01-01Python使用Streamlit快速創(chuàng)建儀表盤(pán)
這篇文章主要為大家詳細(xì)介紹了Python如何使用Streamlit快速創(chuàng)建一個(gè)簡(jiǎn)單的儀表盤(pán),文中的示例代碼簡(jiǎn)潔易懂,快跟隨小編一起來(lái)學(xué)習(xí)一下吧2023-09-09