前一篇談到了如何讓物件可以跟著滑鼠移動!
但有時候我們會希望是透過鍵盤來控制遊戲中的物件啊~~例如:
按「→」按鍵,車子就往右走;按「←」按鍵,就往左走;按「↑」按鍵,就網上或跳一下...等等!尤其是一些射擊的遊戲可能還會加上發射子彈等控制需求!
所以呢~這次就跳脫滑鼠,換介紹一下如何透過鍵盤來控制遊戲中的物件移動!
為了「乾淨」起見~~我們先回到pygame玩遊戲系列(2)剛載入完圖片的狀態........
也就是回到腳踏車還不會移動的起始狀態,接下來是著思考看看:如何讓腳踏車能夠移動呢?
1.如何讓腳踏車像又(→)移動:在遊戲畫面中,一個物件(腳踏車)向右邊移動,就是讓腳踏車圖檔在畫面上繪製的座標(x軸,y軸)位置,向x軸的方向增加!
2.同樣的概念,若是想要讓車子往畫面的左邊(←)移動(也就是後退嚕啦~~),那就得想辦法讓圖檔的x軸減少囉!
~~那就程式方面的需求來看,也就是如何讓腳踏車圖檔的繪製位置可以透過改變座標中的x位置來達成移動的目標囉!
在前一篇我們是透過讀取滑鼠的位置,並將滑鼠座標的x軸作為腳踏車圖檔的x座標來改變腳踏車的位置,這次我們則是要透過偵測鍵盤動作來改變腳踏車圖檔的x座標位置!
所以這次的練習,著重二個重點:
1.在pygame中如何偵測鍵盤的動作?(是否按了鍵盤?按了甚麼按鍵?)
2.偵測到按了指定的按鍵(→或←)後,如何改變腳踏車出現的x座標
OK~~照慣例,先上程式碼再說(完整程式碼):
import pygame, sys
from pygame.locals import *
pygame.init()
bg = pygame.image.load("./imgs/bg-02.jpg") #設定背景圖來源
car_img = pygame.image.load("./imgs/car6.png") #設定要被控制的小車圖檔來源
screen = pygame.display.set_mode((500, 380)) #設定視窗資訊
pygame.display.set_caption('騎車春遊趣') #設定視窗標題
car_x = 240 #設定腳踏車圖檔起始x座標位置
while True: #主視窗循環
screen.blit(bg, (0, 0)) # 設定視窗的背景圖片及相對位置
for event in pygame.event.get(): #偵測視窗中獲取的事件資訊
if event.type == QUIT: #如果出現[關閉]事件(按了關閉視窗的按鈕)時
pygame.quit() #離開pygame
sys.exit() #離開系統
if event.type == pygame.KEYDOWN: #假如發生有鍵盤被按下的事件
if event.key == pygame.K_LEFT: #若按鍵盤事件的按鍵是←(向左)按鍵的話
car_x = car_x - 2 #車子的x位置(car_x)就減2
elif event.key == pygame.K_RIGHT: #若按鍵盤事件的按鍵是→(向右)按鍵的話
car_x = car_x + 2 #車子的x位置(car_x)就加2
screen.blit(car_img, (car_x, 270)) # 設定要被控制的小車出現起始位置
pygame.display.update() #更新視窗
其中都有每行程式碼的註解供參!
比較需要注意(補充說明)的應該就是:
1.我們在第10行的位置,設定了車子圖檔的x座標變數(car_x),作為改變車子x座標的控制參數。並給定一個起始位置(不然一開始車子要出現在哪呢?~是吧)
2.第14行出現的for迴圈,是用來遍歷(偵測)遊戲運作期間所有發生的事件!透過這個迴圈我們可以抓出遊戲期間發生的各種事件(狀況),例如~滑鼠有沒有動?有沒有按鍵被按下...等等
3.第19~23行就是在偵測是否發生鍵盤被按下的事件類別(pygame.KEYDOWN),再進一步判斷發生按下按鍵的是哪一個按鍵(event.key)~~看看是向右鍵(→)或是向左鍵(←),而在pygame中向左的按鍵代碼即為:pygame.K_LEFT;而向右的按鍵代號即為:pygame.K_RIGHT
在pygame中,每一個按鍵都有相對應的代碼表可提供設計時參考!
完整的對應表可以參閱其官方說明資料:
但目前的成果,是按一次車子移動2單位,若要一直移動就要重複按向右或向左按鍵,一直按著向右或向左鍵,只會動一次喔~不會一直跑啦!
若想要按住向右鍵就一直向右跑~~~那該怎麼辦咧?
(按住向右鍵跑一次或一直移動,各有設計上的不同功能及應用時機,沒有對錯或好壞之分喔~~千萬別誤會了喔!)
自己先想想看囉~~~請待下回分解~呵!
沒有留言:
張貼留言