2020年8月30日 星期日

pygame玩遊戲系列(4)~用鍵盤控制物件的移動

 前一篇談到了如何讓物件可以跟著滑鼠移動

但有時候我們會希望是透過鍵盤來控制遊戲中的物件啊~~例如:

按「→」按鍵,車子就往右走;按「←」按鍵,就往左走;按「↑」按鍵,就網上或跳一下...等等!尤其是一些射擊的遊戲可能還會加上發射子彈等控制需求!

所以呢~這次就跳脫滑鼠,換介紹一下如何透過鍵盤來控制遊戲中的物件移動!

為了「乾淨」起見~~我們先回到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單位,若要一直移動就要重複按向右或向左按鍵,一直按著向右或向左鍵,只會動一次喔~不會一直跑啦!

若想要按住向右鍵就一直向右跑~~~那該怎麼辦咧?

(按住向右鍵跑一次或一直移動,各有設計上的不同功能及應用時機,沒有對錯或好壞之分喔~~千萬別誤會了喔!)

自己先想想看囉~~~請待下回分解~呵!

沒有留言:

張貼留言