您好,登錄后才能下訂單哦!
小編給大家分享一下python如何實現按鍵按住不放持續響應,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
在學習飛機大戰中,飛機左右控制都是按鍵按一次移動一次,不能按住一個鍵后持續移動,離開后停止移動。
為了解決這個,查看了參考手冊,說讓用pygame.key.set_repeat() 方法,奈何我剛開始學也看不太明白,只能看懂一些。并且看別人的代碼也比較費勁,畢竟不是自己的邏輯,得看一會兒,最后還是自己想了一個辦法,用flag標簽:
大體思路是這樣的,比如向左持續移動,先在hero定一個屬性標簽設置布爾值為False,然后定義移動方法,在為真時,移動;再然后定義鍵盤的事件,當按下鍵盤時,標簽為真,當抬起鍵盤時,設置為False。最后再while循環里執行這個移動方法和鍵盤函數。具體的代碼部分舉例為:(并不是全部代碼,只是實現這個功能的核心代碼),主要看Hero 類里的__init__方法里的四個屬性以及move方法;key_control函數以及在main函數里的while循環里的 key_control(hero) 以及hero.move()。
import pygame import time from pygame.locals import * # 用來檢測事件,比如鍵盤按鍵操作 class Hero(BasePlane): """定義我方飛機類""" def __init__(self, screen, enemy_temp): BasePlane.__init__(self, 140, 488, screen, "./spritesheets/hero_fly_1.png") # 繼承飛機基類,這里不用管 self.enemy = enemy_temp # 設置上下左右四個屬性 self.key_right_status = False self.key_left_status = False self.key_up_status = False self.key_down_status = False # 以下方法是控制上下左右移動 def move(self): if self.key_right_status: self.x += 3 if self.key_left_status: self.x -= 3 if self.key_down_status: self.y += 3 if self.key_up_status: self.y -= 3 def key_control(hero_temp): """控制鍵盤的函數""" for event in pygame.event.get(): # 判斷是否是點擊了退出按鈕 if event.type == QUIT: print("exit") exit() # 在按下鍵盤時,設置hero的屬性為True elif event.type == KEYDOWN: if event.key == K_a or event.key == K_LEFT: hero_temp.key_left_status = True elif event.key == K_d or event.key == K_RIGHT: hero_temp.key_right_status = True elif event.key == K_w or event.key == K_UP: hero_temp.key_up_status = True elif event.key == K_s or event.key == K_DOWN: hero_temp.key_down_status = True elif event.key == K_SPACE: hero_temp.shoot() # 這里應該是飛機.顯示子彈方法() elif event.type == KEYUP: if event.key == K_a or event.key == K_LEFT: hero_temp.key_left_status = False # 檢測按鍵是否是d或者方向鍵right elif event.key == K_d or event.key == K_RIGHT: hero_temp.key_right_status = False elif event.key == K_w or event.key == K_UP: hero_temp.key_up_status = False elif event.key == K_s or event.key == K_DOWN: hero_temp.key_down_status = False def main(): # 1.創建一個窗口,用來顯示內容 screen = pygame.display.set_mode((320, 568), 0, 32) # 2.創建一個跟窗口大小一致的圖片,用來填充當背景 background = pygame.image.load("./spritesheets/background_2.png") enemy = Enemy(screen) hero = Hero(screen, enemy) # 創建我方飛機英雄對象 while True: # 設定需要顯示的圖在窗口中哪個位置顯示 screen.blit(background, (0, 0)) # 我方飛機英雄顯示 hero.display() # 敵方飛機顯示 enemy.display() enemy.move() enemy.shoot() # 獲取事件,比如按鍵等 key_control(hero) hero.move() # 更新需要顯示的內容 pygame.display.update() time.sleep(0.01) if __name__ == '__main__': main()
以上是“python如何實現按鍵按住不放持續響應”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。