欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python按鍵按住不放持續響應的實例代碼

系統 1607 0

在學習飛機大戰(我也不知道為什么都拿這個練手),飛機左右控制都是按鍵按一次移動一次,不能按住一個鍵后持續移動,離開后停止移動。

為了解決這個,查看了參考手冊,說讓用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按鍵按住不放持續響應的實例代碼就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久人人爽人人爽人人片av不 | 人人狠狠综合88综合久久 | 亚洲国产成人九九综合 | 欧美人两个人激情的免费视频 | 国产一起色一起爱 | 日韩a级片| 久久久久久国产精品免费免费狐狸 | 91xxx在线观看 | 免费黄色在线观看 | 国产成人综合欧美精品久久 | 精品免费国产一区二区三区四区介绍 | 黑白禁区谭小四 | 国产目拍亚洲精品99久久精品 | 2一3sex性hd| 精品AV一区二区三区久久 | 九九久久久 | 99久久精品费精品国产一区二 | 久久r热这里有精品视频 | 亚洲精品日本高清中文字幕 | 黄网站在线观看高清免费 | 亚洲精品一区二区三区蜜桃久 | 91日本在线观看亚洲精品 | 亚洲AV久久无码精品九号 | 黄色精品| 精品国精品国产自在久国产应用 | 午夜在线视频一区二区三区 | 精品一卡2卡三卡4卡免费视频 | 在线天堂中文在线资源网 | 成人免费一区二区三区视频网站 | 国产日韩一区二区三区 | 精品久久久久不卡无毒 | 久久大香香蕉国产免费网站 | 九一国产在线观看 | 免费看日韩片 | 欧美区在线 | 国产欧美一区二区三区另类精品 | 久久精品中文字幕 | 二区三区四区 | 91在线成人 | 婷婷六月天激情 | 免费看日韩片 |