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

Pygame如何使用精靈和碰撞檢測(cè)

 更新時(shí)間:2021年11月17日 11:54:31   投稿:zx  
本文主要介紹了Pygame如何使用精靈和碰撞檢測(cè),它們能夠幫助我們跟蹤屏幕上移動(dòng)的大量圖像。我們還會(huì)了解如何檢測(cè)兩個(gè)圖像相互重疊或者碰撞的方法。

在開始學(xué)習(xí)相關(guān)知識(shí)點(diǎn)之前,我們有必要先學(xué)習(xí)精靈和碰撞檢測(cè)的含義。

精靈(英文譯為 Sprite),其實(shí)在一個(gè)游戲程序中,精靈本質(zhì)指的是一張張小尺寸的圖片,比如游戲中的各種道具、人物、場(chǎng)景裝飾等,它們都可以看做成一張張小的“精靈”圖。除此之外,人物的移動(dòng)也可以看做是一系列小精靈圖構(gòu)成的序列(按幀組成的序列),如下圖所示:


圖1:動(dòng)作逐幀分解圖

如果將逐幀分解后的動(dòng)作,按照一定的頻率播放,那么就形成了動(dòng)畫精靈,您將會(huì)看到雄鷹展翅高飛、人在策馬奔騰、運(yùn)動(dòng)員奮力跳遠(yuǎn)。

精靈有個(gè)特點(diǎn)就是允許精靈之間進(jìn)行交互,也稱之為碰撞,而碰撞檢測(cè),指的就是檢測(cè)兩個(gè)精靈之間是否發(fā)生了碰撞。比如在貪吃蛇游戲中蛇的頭部是否與食物發(fā)生了碰撞,或者飛機(jī)大戰(zhàn)游戲中子彈是否擊中了外星人等等。當(dāng)檢測(cè)到碰撞發(fā)生后,接下來會(huì)觸發(fā)某些事件,比如子彈擊中外星人,外星人就會(huì)消失,玩家的得分也會(huì)隨之增加,并且在游戲屏幕上又會(huì)出現(xiàn)一個(gè)外星人。

Pygame 專門提供了一個(gè)處理精靈的模塊,也就是 sprite(pygame.sprite)模塊。通常情況下,我們使用該模塊的基類 Sprite 來創(chuàng)建一個(gè)子類,從而達(dá)到處理精靈的目的,該子類提供了操作精靈的常用屬性和方法,如下所示:

屬性&方法 說明
self.image 加載要顯示的精靈圖片,控制圖片大小和填充色
self.rect 精靈圖片顯示在哪個(gè)位置
Sprite.update() 刷新精靈圖,使其相應(yīng)效果生效
Sprite.add() 添加精靈圖到精靈組中(groups)
Sprite.remove() 從精靈組中刪除選中的精靈圖
Sprite.kill() 刪除精靈組中全部的精靈
Sprite.alive() 判斷某個(gè)精靈是否屬于精靈組

注意,當(dāng)游戲中有大量的精靈時(shí),操作它們將變得復(fù)雜,此時(shí)通過構(gòu)建精靈容器(group 類)也就是精靈組來統(tǒng)一管理這些精靈。構(gòu)建方法如下:

# 創(chuàng)建精靈組
group = pygame.sprite.Group()
# 向組內(nèi)添加一個(gè)精靈
group.add(sprite_one)

于此同時(shí)pygame.sprite模塊也提供了多種檢測(cè)精靈是否碰撞的方法,如下所示:

方法 說明
pygame.sprite.collide_rect()  兩個(gè)精靈之間的矩形檢測(cè),即矩形區(qū)域是否有交匯,返回一個(gè)布爾值。
pygame.sprite.collide_circle() 兩個(gè)精靈之間的圓形檢測(cè),即圓形區(qū)域是否有交匯,返回一個(gè)布爾值。
pygame.sprite.collide_mask()  兩個(gè)精靈之間的像素蒙版檢測(cè),更為精準(zhǔn)的一種檢測(cè)方式。
pygame.sprite.spritecollide()  精靈和精靈組之間的矩形碰撞檢測(cè),一個(gè)組內(nèi)的所有精靈會(huì)逐一地對(duì)另外一個(gè)單個(gè)精靈進(jìn)行碰撞檢測(cè),返回值是一個(gè)列表,包含了發(fā)生碰撞的所有精靈。
pygame.sprite.spritecollideany() 精靈和精靈組之間的矩形碰撞檢測(cè),上述函數(shù)的變體,當(dāng)發(fā)生碰撞時(shí),返回組內(nèi)的一個(gè)精靈,無碰撞發(fā)生時(shí),返回 None。
pygame.sprite.groupcollide() 檢測(cè)在兩個(gè)組之間發(fā)生碰撞的所有精靈,它返回值是一個(gè)字典,將第一組中發(fā)生碰撞的精靈作為鍵,第二個(gè)組中發(fā)生碰撞的精靈作為值。

下面看一組簡(jiǎn)單的示例,代碼如下所示:

import pygame
class Snake(pygame.sprite.Sprite):
    #定義構(gòu)造函數(shù)
    def __init__(self,filename,location):
        # 調(diào)父類來初始化子類
        pygame.sprite.Sprite.__init__(self)
        # 加載圖片
        self.image = pygame.image.load(filename)
        # 獲取圖片rect區(qū)域
        self.rect = self.image.get_rect()
        # 設(shè)置位置
        self.rect.topleft=location
# 初始化pygame
pygame.init()
screen = pygame.display.set_mode((500,400))
pygame.display.set_caption('C語言中文網(wǎng)')
# 填充為白色屏幕
screen.fill((255,255,255))
filename ="C:/Users/Administrator/Desktop/snake.png"
location =(100,150)
snake1 = Snake(filename,location)
# 碰撞檢測(cè),必須有兩個(gè)精靈,因此再創(chuàng)建一個(gè)精靈,并使用location來控制第二個(gè)精靈的位置
location_2 = (100,80)
snake2 = Snake('C:/Users/Administrator/Desktop/logo.png',location_2)
# 調(diào)用 collide_rect()進(jìn)行矩形區(qū)域檢測(cè),返回一個(gè)布爾值,碰撞返回True,否則返回False
crash_result = pygame.sprite.collide_rect(snake1,snake2)
if crash_result:
    print("精靈碰撞了!")
    pass
else:
    print('精靈沒碰撞')
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit()
    # 繪制精靈到屏幕上
    screen.blit(snake1.image,snake1.rect)
    screen.blit(snake2.image,snake2.rect)
    # 刷新顯示屏幕
    pygame.display.update()

當(dāng)精靈沒有發(fā)生碰撞時(shí),程序的運(yùn)行結(jié)果如下:


圖2:運(yùn)行結(jié)果

接下來,我們將 snake2 的location_2參數(shù)變?yōu)?(100,140),然后再次運(yùn)行程序,這時(shí)兩個(gè)精靈就會(huì)發(fā)生碰撞,運(yùn)行結(jié)果如下:


圖3:運(yùn)行結(jié)果

除上述內(nèi)容外,Pygame 還提供許多其他模塊,比如 mixer(聲音)、movie(播放視頻)、music(播放音頻)、sndarray(操作聲音數(shù)據(jù))等模塊,由于這些模塊使用起來較為簡(jiǎn)單,因此這里不再逐一介紹,感興趣的朋友可以閱讀 Pygame 官方文檔 —>點(diǎn)擊前往!

到此這篇關(guān)于Pygame如何使用精靈和碰撞檢測(cè)的文章就介紹到這了,更多相關(guān)Pygame 精靈和碰撞檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python3+Pygame實(shí)現(xiàn)射擊游戲完整代碼

    Python3+Pygame實(shí)現(xiàn)射擊游戲完整代碼

    這篇文章主要介紹了Python3+Pygame實(shí)現(xiàn)射擊游戲完整代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • python做反被爬保護(hù)的方法

    python做反被爬保護(hù)的方法

    在本文里小編給大家整理了一篇關(guān)于python做反被爬保護(hù)的方法的方法,由此需求的同學(xué)參考學(xué)習(xí)下。
    2019-07-07
  • python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形)

    python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形)

    這篇文章主要介紹了python 使用turtule繪制遞歸圖形(螺旋、二叉樹、謝爾賓斯基三角形) ,需要的朋友可以參考下
    2019-05-05
  • Python如何使用turtle庫繪制圖形

    Python如何使用turtle庫繪制圖形

    這篇文章主要介紹了Python如何使用turtle庫繪制圖形,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Pandas中DataFrame對(duì)象轉(zhuǎn)置(交換行列)

    Pandas中DataFrame對(duì)象轉(zhuǎn)置(交換行列)

    本文主要介紹了Pandas中DataFrame對(duì)象轉(zhuǎn)置(交換行列),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python?運(yùn)算符Inplace?與Standard?

    Python?運(yùn)算符Inplace?與Standard?

    這篇文章主要介紹了Python?運(yùn)算符Inplace?與Standard,nplace運(yùn)算符的行為類似于普通運(yùn)算符,只是它們?cè)诳勺兒筒豢勺兡繕?biāo)的情況下以不同的方式運(yùn)行
    2022-09-09
  • Python操作Excel數(shù)據(jù)的封裝函數(shù)分享

    Python操作Excel數(shù)據(jù)的封裝函數(shù)分享

    對(duì)比其它編程語言,我們都知道Python最大的優(yōu)勢(shì)是代碼簡(jiǎn)單,有豐富的第三方開源庫供開發(fā)者使用。而對(duì)于數(shù)據(jù)的讀取和存儲(chǔ),對(duì)于普通人來講,除了數(shù)據(jù)庫之外,最常見的就是微軟的Excel。本文為大家準(zhǔn)備了Python操作Excel數(shù)據(jù)的封裝函數(shù),希望對(duì)大家有所幫助
    2022-11-11
  • Python中的pathlib.Path為什么不繼承str詳解

    Python中的pathlib.Path為什么不繼承str詳解

    這篇文章主要給大家介紹了關(guān)于Python中pathlib.Path為什么不繼承str的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Python的輸入,輸出和標(biāo)識(shí)符詳解

    Python的輸入,輸出和標(biāo)識(shí)符詳解

    這篇文章主要介紹了介紹了Python的輸入,輸出和標(biāo)識(shí)符,有需要的朋友們可以參考一下,希望能給您帶來幫助
    2022-01-01
  • pytorch之torch.nn.Identity()的作用及解釋

    pytorch之torch.nn.Identity()的作用及解釋

    這篇文章主要介紹了pytorch之torch.nn.Identity()的作用及解釋,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08

最新評(píng)論