亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python如何實現按鍵按住不放持續響應

發布時間:2021-07-20 14:25:36 來源:億速云 閱讀:265 作者:小新 欄目:開發技術

小編給大家分享一下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如何實現按鍵按住不放持續響應”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔南| 朝阳区| 扎囊县| 嘉祥县| 六盘水市| 临朐县| 石家庄市| 即墨市| 霞浦县| 从化市| 沂水县| 九龙坡区| 肇源县| 开江县| 华亭县| 蒙阴县| 大方县| 秦皇岛市| 平潭县| 台东县| 北安市| 青海省| 时尚| 内黄县| 南木林县| 龙井市| 夏邑县| 梨树县| 梓潼县| 湘西| 家居| 尼木县| 布尔津县| 本溪| 那坡县| 武穴市| 凤城市| 古浪县| 巩义市| 长治市| 阳朔县|