欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)精靈的使用上篇

 更新時(shí)間:2022年08月04日 11:27:37   作者:acktomas  
相信大多數(shù)8090后都玩過(guò)太空射擊游戲,在過(guò)去游戲不多的年代太空射擊自然屬于經(jīng)典好玩的一款了,今天我們來(lái)自己動(dòng)手實(shí)現(xiàn)它,在編寫(xiě)學(xué)習(xí)中回顧過(guò)往展望未來(lái),下面開(kāi)始講解精靈的使用

視頻

觀看視頻

使用精靈

這是我們“使用 Pygame 進(jìn)行游戲開(kāi)發(fā)”教程系列的第 2 部分。您應(yīng)該從第 1 部分開(kāi)始:入門

什么是精靈

sprite 是一個(gè)計(jì)算機(jī)圖形術(shù)語(yǔ),指屏幕上可以移動(dòng)的任何對(duì)象。當(dāng)您玩任何2D游戲時(shí),您在屏幕上看到的所有對(duì)象都是精靈。精靈可以是動(dòng)畫(huà)的,它們可以由玩家控制,甚至可以相互交互。

我們將在游戲循環(huán)的更新和繪制部分中負(fù)責(zé)更新和繪制精靈。但您可能可以想象,如果您的游戲具有大量精靈,那么游戲循環(huán)的這些部分可能會(huì)變得非常長(zhǎng)且復(fù)雜。幸運(yùn)的是,Pygame對(duì)此有一個(gè)很好的解決方案:精靈組。

精靈組只是一個(gè)精靈的集合,您可以同時(shí)對(duì)它們執(zhí)行所有操作。讓我們創(chuàng)建一個(gè)精靈組來(lái)保存游戲中的所有精靈:

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

現(xiàn)在,我們可以通過(guò)在循環(huán)中添加以下內(nèi)容來(lái)利用該組:

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

現(xiàn)在,對(duì)于我們創(chuàng)建的每個(gè)精靈,我們只需確保將其添加到all_sprites精靈組中,它就會(huì)自動(dòng)繪制在屏幕上,并且每次通過(guò)循環(huán)進(jìn)行更新。

創(chuàng)建一個(gè)精靈

現(xiàn)在我們準(zhǔn)備制作我們的第一個(gè)精靈。在Pygame中,精靈是對(duì)象。它是將數(shù)據(jù)和代碼分組到單個(gè)實(shí)體中的便捷方法。起初可能有點(diǎn)令人困惑,但幸運(yùn)的是,Pygame精靈是練習(xí)對(duì)象并習(xí)慣它們工作方式的好方法。

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

class Player(pygame.sprite.Sprite):

class告訴Python我們正在定義一個(gè)新類,它將是玩家精靈,其類型是pygame.sprite.Sprite,這意味著它將基于Pygame的預(yù)定義Sprite

我們?cè)?code>class定義中第一位代碼是__init__()特殊函數(shù),它定義了每當(dāng)創(chuàng)建此類型的新對(duì)象時(shí)將運(yùn)行哪些代碼。每個(gè) Pygame Sprite必須具有兩個(gè)屬性:一個(gè)image和一個(gè)rect

關(guān)于Surface對(duì)象的介紹可以參考這里的介紹:網(wǎng)址

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 所必需的 ,它運(yùn)行內(nèi)置的Sprint類初始值設(shè)定項(xiàng)。接下來(lái),我們定義 image屬性,在這里,我們只是創(chuàng)建一個(gè)Surface,它是50 x 50正方形并用GREEN顏色填充它。稍后,我們將學(xué)習(xí)如何用 image創(chuàng)建精靈,例如角色或宇宙飛船,但現(xiàn)在一個(gè)固定大小的正方形已經(jīng)足夠了。

接下來(lái),我們必須定義精靈的rect ,它是“矩形”的縮寫(xiě)。在 Pygame 中,矩形無(wú)處不在,以跟蹤對(duì)象的坐標(biāo)。get_rect()命令計(jì)算image的矩形。

我們可以使用rect 將精靈放在屏幕上的任何位置。讓精靈開(kāi)始就出現(xiàn)在屏幕中間:

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)

現(xiàn)在我們已經(jīng)定義了 Player 精靈,我們需要通過(guò)創(chuàng)建 Player 類的實(shí)例來(lái)“生成”它。我們還需要確保將 sprite 添加到all_sprites組中:

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

現(xiàn)在,如果您運(yùn)行程序,您將在屏幕中心看到綠色方塊。繼續(xù)并增加WIDTHHEIGHT的設(shè)置,以便您將有足夠的空間讓精靈在下一步中移動(dòng)。

精靈運(yùn)動(dòng)

請(qǐng)記住,在游戲循環(huán)中,我們有all_sprites.update() .這意味著對(duì)于組中的每個(gè)精靈,Pygame將查找一個(gè)update()函數(shù)并運(yùn)行它。因此,要讓我們的精靈移動(dòng),我們只需要定義它的更新規(guī)則:

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

這意味著每次通過(guò)游戲循環(huán)時(shí),我們都會(huì)將精靈的 x 坐標(biāo)增加 5 個(gè)像素。繼續(xù)運(yùn)行它,你會(huì)看到精靈消失在屏幕右側(cè):

讓我們通過(guò)使精靈環(huán)繞運(yùn)動(dòng)來(lái)解決這個(gè)問(wèn)題 - 每當(dāng)它到達(dá)屏幕的右側(cè)時(shí),我們都會(huì)將其移動(dòng)到左側(cè)。我們可以通過(guò)在精靈的rect上使用一個(gè)方便的“句柄”來(lái)輕松完成此操作:

因此,如果rect 的左邊緣離開(kāi)屏幕,我們將右邊緣設(shè)置為 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

現(xiàn)在我們可以看到精靈將出現(xiàn)在屏幕周圍:

這將在本課中完成。繼續(xù)嘗試 - 請(qǐng)注意,您在精靈update()方法中放入的任何內(nèi)容都會(huì)在每一幀發(fā)生。嘗試讓精靈上下移動(dòng)(更改y坐標(biāo))或讓它從墻上反彈(當(dāng)矩形到達(dá)邊緣時(shí)反轉(zhuǎn)方向)。

在下一教程中,我們將向您展示如何為精靈使用藝術(shù) - 將其從普通正方形更改為動(dòng)畫(huà)角色。

到此這篇關(guān)于Pygame游戲開(kāi)發(fā)之太空射擊實(shí)戰(zhàn)精靈的使用篇的文章就介紹到這了,更多相關(guān)Pygame太空射擊內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pandas數(shù)據(jù)聚合與分組運(yùn)算的實(shí)現(xiàn)

    pandas數(shù)據(jù)聚合與分組運(yùn)算的實(shí)現(xiàn)

    本文主要介紹了pandas數(shù)據(jù)聚合與分組運(yùn)算的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 初步剖析C語(yǔ)言編程中的結(jié)構(gòu)體

    初步剖析C語(yǔ)言編程中的結(jié)構(gòu)體

    這篇文章主要介紹了C語(yǔ)言編程中的結(jié)構(gòu)體,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2016-01-01
  • Python socket.error: [Errno 98] Address already in use的原因和解決方法

    Python socket.error: [Errno 98] Address already in use的原因和解決

    這篇文章主要介紹了Python socket.error: [Errno 98] Address already in use的原因和解決方法,在Python的socket編程中可能會(huì)經(jīng)常遇到這個(gè)問(wèn)題,需要的朋友可以參考下
    2014-08-08
  • python將字母轉(zhuǎn)化為數(shù)字實(shí)例方法

    python將字母轉(zhuǎn)化為數(shù)字實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于python如何將字母轉(zhuǎn)化為數(shù)字的相關(guān)實(shí)例內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2019-10-10
  • python3 re返回形式總結(jié)

    python3 re返回形式總結(jié)

    在本篇文章里小編給大家整理了關(guān)于python3 re返回形式,對(duì)此有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-11-11
  • Python 中的lambda函數(shù)介紹

    Python 中的lambda函數(shù)介紹

    Lambda函數(shù),即Lambda 表達(dá)式(lambda expression),是一個(gè)匿名函數(shù)(不存在函數(shù)名的函數(shù)),這篇文章主要介紹了Python lambda函數(shù)的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2018-10-10
  • python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解

    python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解

    這篇文章主要介紹了python 實(shí)現(xiàn)tar文件壓縮解壓的實(shí)例詳解的相關(guān)資料,這里提供實(shí)現(xiàn)方法,幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Python實(shí)現(xiàn)登錄人人網(wǎng)并抓取新鮮事的方法

    Python實(shí)現(xiàn)登錄人人網(wǎng)并抓取新鮮事的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)登錄人人網(wǎng)并抓取新鮮事的方法,可實(shí)現(xiàn)Python模擬登陸并抓取新鮮事的功能,需要的朋友可以參考下
    2015-05-05
  • 解決pycharm下pyuic工具使用的問(wèn)題

    解決pycharm下pyuic工具使用的問(wèn)題

    這篇文章主要介紹了解決pycharm下pyuic工具使用的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-04-04
  • Python中matplotlib中文亂碼解決辦法

    Python中matplotlib中文亂碼解決辦法

    Matplotlib是Python的一個(gè)很好的繪圖包,但是其本身并不支持中文(貌似其默認(rèn)配置中沒(méi)有中文字體),所以如果繪圖中出現(xiàn)了中文,就會(huì)出現(xiàn)亂碼
    2017-05-05

最新評(píng)論