1、引言
前面文章中咱們學會讓方塊隨着時間運動,本文咱們實現用鍵盤控制方塊的移動。api
2、pygame事件概念
事件在計算機術語經常使用來指系統中發生的重要事情,好比用戶輸入、定時器到期等。pygame提供了一個 pygame.event.get()來獲取遊戲的事件,經過讀取整個事件隊列,程序能夠得到當前的事件並作相應處理。pygame文檔中列出如下事件: 列表中KEYDOWN、KEYUP這兩事件分別表明鍵盤按下、鍵盤松開事件。鍵盤事件也只是事件列表中的一種,咱們須要判斷是否有鍵盤按下,再經過api返回的鍵值來判斷某個鍵有沒有被按下。ui
if event.type == KEYDOWN: if event.key == pygame.K_w: print("The button is pressed")
上述代碼中程序判斷鍵盤按下事件發生後,再判斷是否按鍵「w」被按下。code
3、功能及代碼實現
awsd四個字母在不少遊戲作爲左上下右四個方向鍵,咱們來實現一個功能,先在遊戲中畫出一個方塊,當按下a鍵就將方塊向左移動,當按下d鍵後,方塊向右移動。blog
思路
方塊的x座標會在不一樣的狀況下有所變化,咱們用一個變量x來保存,x值只有在鍵盤被按下後變化,咱們用依照前面代碼作好相應處理就好。 代碼以下:隊列
import pygame, sys # 初始化 pygame.init() SCREEN = pygame.display.set_mode((400, 300)) pygame.display.set_caption('Hello World!') x = 110 # 遊戲主循環 while True: for event in pygame.event.get(): # 處理退出事件 if event.type == pygame.QUIT: pygame.quit() sys.exit() # 鍵盤按下事件 elif event.type == pygame.KEYDOWN: # 'a'鍵被按下 if event.key == pygame.K_a: x -= 5 elif event.key == pygame.K_d: x += 5 SCREEN.fill((255, 255, 255)) # 調用 pygame.display.update() 方法更新整個屏幕的顯示 pygame.draw.rect(SCREEN, (255, 0, 0), (x, 130, 100, 50)) pygame.display.update() pygame.time.delay(50)
默認的話pygame不會重複地去響應一個被一直按住的鍵,只是在按鍵第一次被按下的時候響應一次,若是須要重複響應一個按鍵的話下面的操做:遊戲
pygame.key.set_repeat(10) #參數是一個以毫秒爲單位的值
遊戲主循環前加上這句能獲得更好的遊戲體驗。事件
4、練習題
- 增長功能,當按下w鍵就將方塊向上移動,當按下s鍵後,方塊向下移動。
- 當前代碼中,即便方塊走出邊界,依然能夠繼續走,增長功能,使用當方塊走到左邊或者右邊邊界時,沒法繼續再往外邊走。(PS: 能夠經過保證x值的範圍來完成功能)