控製精靈移動的兩種方式
訂閱 375
Pygame 控製角色移動的兩種方式影片示範 YouTube
前言
在遊戲開發中,角色移動是最基礎也最重要的功能之一。本文將介紹在 Python Pygame 中實作角色移動的兩種主要方式:通過即時取得裝置狀態,然後移動角色;通過事件取得裝置狀態,然後移動角色。
角色移動的基本原理
在大多數遊戲中,玩家需要通過輸入裝置(如鍵盤、滑鼠或遊戲控製器)來控製遊戲角色的移動。在 Pygame 中實作這一功能通常分為兩個步驟:取得輸入裝置的狀態(如鍵盤按鍵的按下狀態);根據裝置狀態調整角色的位置。
方式一:即時取得裝置狀態
Pygame 提供了key
、mouse
和joystick
模組,這些模組包含可以即時取得鍵盤、滑鼠和控製器狀態的函式。本文將以key
模組為例進行示範,其實作步驟大致如下。
假設已經定義了一個表示飛機的精靈類別Plane
,我們需要覆寫Plane
類別的update
方法。在update
方法中,使用key
模組的get_pressed
函式檢測方向鍵的按下狀態(當然,你可以指定其他的按鍵來移動角色),根據按鍵狀態修改角色的位置。最後,在遊戲主迴圈中呼叫飛機所在精靈組的update
方法。
下面的程式碼邏輯可能會出現方向鍵優先順序的問題(上方向鍵和左方向鍵優先順序更高)。為了解決這個問題,可以將if
陳述式分割為四個獨立的條件判斷,這樣同時按下相反方向鍵時,角色會停止移動。
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
self.rect.x -= 1
elif keys[pygame.K_RIGHT]:
self.rect.x += 1
if keys[pygame.K_UP]:
self.rect.y -= 1
elif keys[pygame.K_DOWN]:
self.rect.y += 1
方式二:通過事件取得裝置狀態
Pygame 的event
模組提供了事件處理功能,我們可以通過處理與裝置狀態有關的事件(如按鍵按下和釋放)來實作角色移動,其實作步驟大致如下。
依然假設已經定義了表示飛機的精靈類別Plane
,為其新增表示水平和垂直速度的變數speedx
和speedy
。修改Plane
的update
方法,根據速度變數更新位置。在遊戲迴圈中處理鍵盤事件,修改飛機物件的speedx
和speedy
變數。
在遊戲迴圈中,需要處理與按鍵相關的事件,當按鍵按下時設定速度,當按鍵釋放時重設速度為0
。重設速度需要檢查目前速度方向,避免錯誤地停止移動。
def update(self):
self.rect.x += self.speedx
self.rect.y += self.speedy
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
plane.speedx = -1
elif event.key == pygame.K_RIGHT:
plane.speedx = 1
elif event.key == pygame.K_UP:
plane.speedy = -1
elif event.key == pygame.K_DOWN:
plane.speedy = 1
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT and plane.speedx < 0:
plane.speedx = 0
elif event.key == pygame.K_RIGHT and plane.speedx > 0:
plane.speedx = 0
elif event.key == pygame.K_UP and plane.speedy < 0:
plane.speedy = 0
elif event.key == pygame.K_DOWN and plane.speedy > 0:
plane.speedy = 0