python按鍵按住不放持續(xù)響應的實例代碼
在學習飛機大戰(zhàn)(我也不知道為什么都拿這個練手),飛機左右控制都是按鍵按一次移動一次,不能按住一個鍵后持續(xù)移動,離開后停止移動。
為了解決這個,查看了參考手冊,說讓用pygame.key.set_repeat() 方法,奈何我剛開始學也看不太明白,只能看懂一些。并且看別人的代碼也比較費勁,畢竟不是自己的邏輯,得看一會兒,最后還是自己想了一個辦法,用flag標簽:
大體思路是這樣的,比如向左持續(xù)移動,先在hero定一個屬性標簽設置布爾值為False,然后定義移動方法,在為真時,移動;再然后定義鍵盤的事件,當按下鍵盤時,標簽為真,當抬起鍵盤時,設置為False。最后再while循環(huán)里執(zhí)行這個移動方法和鍵盤函數。具體的代碼部分舉例為:(并不是全部代碼,只是實現(xiàn)這個功能的核心代碼),主要看Hero 類里的__init__方法里的四個屬性以及move方法;key_control函數以及在main函數里的while循環(huán)里的 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.創(chuàng)建一個窗口,用來顯示內容 screen = pygame.display.set_mode((320, 568), 0, 32) # 2.創(chuàng)建一個跟窗口大小一致的圖片,用來填充當背景 background = pygame.image.load("./spritesheets/background_2.png") enemy = Enemy(screen) hero = Hero(screen, enemy) # 創(chuàng)建我方飛機英雄對象 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按鍵按住不放持續(xù)響應的實例代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python 實現(xiàn)鍵盤鼠標按鍵模擬
- python實現(xiàn)模擬按鍵,自動翻頁看u17漫畫
- Python實現(xiàn)windows下模擬按鍵和鼠標點擊的方法
- python實現(xiàn)按鍵精靈找色點擊功能教程,使用pywin32和Pillow庫
- python中字典按鍵或鍵值排序的實現(xiàn)代碼
- python對綁定事件的鼠標、按鍵的判斷實例
- Python中按鍵來獲取指定的值
- Python實現(xiàn)的字典排序操作示例【按鍵名key與鍵值value排序】
- Python實現(xiàn)對字典分別按鍵(key)和值(value)進行排序的方法分析
- python 字典(dict)按鍵和值排序
- Python可跨平臺實現(xiàn)獲取按鍵的方法
- Python 隨機按鍵模擬2小時
相關文章
python實現(xiàn)基于兩張圖片生成圓角圖標效果的方法
這篇文章主要介紹了python實現(xiàn)基于兩張圖片生成圓角圖標效果的方法,實例分析了Python使用pil模塊進行圖片處理的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03pandas中DataFrame的merge操作的實現(xiàn)
本文主要介紹了pandas中DataFrame的merge操作的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-07-07Pytest+request+Allure實現(xiàn)接口自動化框架
接口自動化是指模擬程序接口層面的自動化,由于接口不易變更,維護成本更小,所以深受各大公司的喜愛,本文主要介紹了Pytest+request+Allure實現(xiàn)接口自動化框架,感興趣的可以了解一下2021-07-07