Spirte 的概念在很多遊戲引擎中都有,但是沒有統一的定義,可以籠統的認爲 Sprite 是一個對象,可以方便創建、繪製、管理、銷燬運動實例。
PyGame 中的 Sprite 通過繼承 Sprite 類實現,主要動作是重載 update 方法和給 image、rect 屬性賦值。其中,image 表示這個 Sprite 的顯示圖形,rect 表示圖形的位置和大小,而update用於更新 Sprite 的行爲,比如:位置、大小、方向、圖形的變化等。
https://www.pygame.org/docs/tut/SpriteIntro.html
前面,我們移動方塊的例子是繪製的,現在,我們用 Sprite 來實現:
class Block(pygame.sprite.Sprite):
# 構造函數,方塊顏色和長、寬
def __init__(self, color, width, height):
# 調用父類構造函數
pygame.sprite.Sprite.__init__(self)
# 創建指定大小方塊,填充顏色,也可從圖片文件加載
self.image = pygame.Surface([width, height])
self.image.fill(color)
# 獲取默認大小和位置
self.rect = self.image.get_rect()
# 移動到初始位置
self.rect = self.rect.move(100, 100)
# 初始化當前移動方向,向左
self.direction = 1
def update(self):
if width - self.rect.width <= self.rect.left or self.rect.left < 0:
self.direction = -self.direction
self.rect = self.rect.move(self.direction, 0)
# print("update rect", self.direction, width, (width - self.rect.width), self.rect)
block = Block(color, 20, 20)
感覺繪製一個方塊比前面需要更多的代碼,但是實際上,對於遊戲裏面衆多的動畫對象,使用 Sprite 結構和邏輯更加清晰。