一营勤、引言
前面用pygame開發(fā)自己的游戲-2.讓方塊動(dòng)起來(lái)文章中我們學(xué)會(huì)讓方塊隨著時(shí)間運(yùn)動(dòng)厅各,本文我們實(shí)現(xiàn)用鍵盤控制方塊的移動(dòng)终议。
二桃漾、pygame事件概念
事件在計(jì)算機(jī)術(shù)語(yǔ)常用來(lái)指系統(tǒng)中發(fā)生的重要事情贷盲,比如用戶輸入淘这、定時(shí)器到期等。pygame提供了一個(gè) pygame.event.get()來(lái)獲取游戲的事件巩剖,通過讀取整個(gè)事件隊(duì)列铝穷,程序可以獲得當(dāng)前的事件并做相應(yīng)處理。pygame文檔中列出以下事件:
列表中KEYDOWN佳魔、KEYUP這兩事件分別代表鍵盤按下曙聂、鍵盤松開事件吃引。鍵盤事件也只是事件列表中的一種筹陵,我們需要判斷是否有鍵盤按下,再通過api返回的鍵值來(lái)判斷某個(gè)鍵有沒有被按下朦佩。
if event.type == KEYDOWN:
if event.key == pygame.K_w:
print("The button is pressed")
上述代碼中程序判斷鍵盤按下事件發(fā)生后,再判斷是否按鍵“w”被按下语稠。
三宋彼、功能及代碼實(shí)現(xiàn)
awsd四個(gè)字母在很多游戲做為左上下右四個(gè)方向鍵仙畦,我們來(lái)實(shí)現(xiàn)一個(gè)功能,先在游戲中畫出一個(gè)方塊慨畸,當(dāng)按下a鍵就將方塊向左移動(dòng)莱坎,當(dāng)按下d鍵后,方塊向右移動(dòng)寸士。
思路
方塊的x坐標(biāo)會(huì)在不同的情況下有所變化檐什,我們用一個(gè)變量x來(lái)保存,x值只有在鍵盤被按下后變化弱卡,我們用依照前面代碼做好相應(yīng)處理就好乃正。
代碼如下:
import pygame, sys
# 初始化
pygame.init()
SCREEN = pygame.display.set_mode((400, 300))
pygame.display.set_caption('Hello World!')
x = 110
# 游戲主循環(huán)
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))
# 調(diào)用 pygame.display.update() 方法更新整個(gè)屏幕的顯示
pygame.draw.rect(SCREEN, (255, 0, 0), (x, 130, 100, 50))
pygame.display.update()
pygame.time.delay(50)
默認(rèn)的話pygame不會(huì)重復(fù)地去響應(yīng)一個(gè)被一直按住的鍵,只是在按鍵第一次被按下的時(shí)候響應(yīng)一次婶博,如果需要重復(fù)響應(yīng)一個(gè)按鍵的話下面的操作:
pygame.key.set_repeat(10)
#參數(shù)是一個(gè)以毫秒為單位的值
游戲主循環(huán)前加上這句能得到更好的游戲體驗(yàn)瓮具。
四、練習(xí)題
- 增加功能凡人,當(dāng)按下w鍵就將方塊向上移動(dòng)名党,當(dāng)按下s鍵后,方塊向下移動(dòng)划栓。
- 當(dāng)前代碼中兑巾,即使方塊走出邊界,依然可以繼續(xù)走忠荞,增加功能,使用當(dāng)方塊走到左邊或者右邊邊界時(shí)帅掘,無(wú)法繼續(xù)再往外邊走委煤。(PS: 可以通過保證x值的范圍來(lái)完成功能)