Pygame遊戲開發之太空射擊實戰精靈的使用上篇

視頻

觀看視頻

使用精靈

這是我們“使用 Pygame 進行遊戲開發”教程系列的第 2 部分。您應該從第 1 部分開始:入門

什麼是精靈

sprite 是一個計算機圖形術語,指屏幕上可以移動的任何對象。當您玩任何2D遊戲時,您在屏幕上看到的所有對象都是精靈。精靈可以是動畫的,它們可以由玩傢控制,甚至可以相互交互。

我們將在遊戲循環的更新和繪制部分中負責更新和繪制精靈。但您可能可以想象,如果您的遊戲具有大量精靈,那麼遊戲循環的這些部分可能會變得非常長且復雜。幸運的是,Pygame對此有一個很好的解決方案:精靈組。

精靈組隻是一個精靈的集合,您可以同時對它們執行所有操作。讓我們創建一個精靈組來保存遊戲中的所有精靈:

 clock = pygame.time.Clock()
 all_sprites = pygame.sprite.Group()

現在,我們可以通過在循環中添加以下內容來利用該組:

    # Update
    all_sprites.update()
    # Draw / render
    screen.fill(BLACK)
    all_sprites.draw(screen)

現在,對於我們創建的每個精靈,我們隻需確保將其添加到all_sprites精靈組中,它就會自動繪制在屏幕上,並且每次通過循環進行更新。

創建一個精靈

現在我們準備制作我們的第一個精靈。在Pygame中,精靈是對象。它是將數據和代碼分組到單個實體中的便捷方法。起初可能有點令人困惑,但幸運的是,Pygame精靈是練習對象並習慣它們工作方式的好方法。

我們首先定義我們的新精靈:

class Player(pygame.sprite.Sprite):

class告訴Python我們正在定義一個新類,它將是玩傢精靈,其類型是pygame.sprite.Sprite,這意味著它將基於Pygame的預定義Sprite

我們在class定義中第一位代碼是__init__()特殊函數,它定義瞭每當創建此類型的新對象時將運行哪些代碼。每個 Pygame Sprite必須具有兩個屬性:一個image和一個rect

關於Surface對象的介紹可以參考這裡的介紹:網址

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()

第一行pygame.sprite.Sprite.__init__(self)是 Pygame 所必需的 ,它運行內置的Sprint類初始值設定項。接下來,我們定義 image屬性,在這裡,我們隻是創建一個Surface,它是50 x 50正方形並用GREEN顏色填充它。稍後,我們將學習如何用 image創建精靈,例如角色或宇宙飛船,但現在一個固定大小的正方形已經足夠瞭。

接下來,我們必須定義精靈的rect ,它是“矩形”的縮寫。在 Pygame 中,矩形無處不在,以跟蹤對象的坐標。get_rect()命令計算image的矩形。

我們可以使用rect 將精靈放在屏幕上的任何位置。讓精靈開始就出現在屏幕中間:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)

現在我們已經定義瞭 Player 精靈,我們需要通過創建 Player 類的實例來“生成”它。我們還需要確保將 sprite 添加到all_sprites組中:

all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)

現在,如果您運行程序,您將在屏幕中心看到綠色方塊。繼續並增加WIDTHHEIGHT的設置,以便您將有足夠的空間讓精靈在下一步中移動。

精靈運動

請記住,在遊戲循環中,我們有all_sprites.update() .這意味著對於組中的每個精靈,Pygame將查找一個update()函數並運行它。因此,要讓我們的精靈移動,我們隻需要定義它的更新規則:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)
    def update(self):
        self.rect.x += 5

這意味著每次通過遊戲循環時,我們都會將精靈的 x 坐標增加 5 個像素。繼續運行它,你會看到精靈消失在屏幕右側:

讓我們通過使精靈環繞運動來解決這個問題 – 每當它到達屏幕的右側時,我們都會將其移動到左側。我們可以通過在精靈的rect上使用一個方便的“句柄”來輕松完成此操作:

因此,如果rect 的左邊緣離開屏幕,我們將右邊緣設置為 0:

class Player(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.Surface((50, 50))
        self.image.fill(GREEN)
        self.rect = self.image.get_rect()
        self.rect.center = (WIDTH / 2, HEIGHT / 2)
    def update(self):
        self.rect.x += 5
        if self.rect.left > WIDTH:
            self.rect.right = 0

現在我們可以看到精靈將出現在屏幕周圍:

這將在本課中完成。繼續嘗試 – 請註意,您在精靈update()方法中放入的任何內容都會在每一幀發生。嘗試讓精靈上下移動(更改y坐標)或讓它從墻上反彈(當矩形到達邊緣時反轉方向)。

在下一教程中,我們將向您展示如何為精靈使用藝術 – 將其從普通正方形更改為動畫角色。

到此這篇關於Pygame遊戲開發之太空射擊實戰精靈的使用篇的文章就介紹到這瞭,更多相關Pygame太空射擊內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: