亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pygame怎么使用精靈和碰撞檢測

發布時間:2021-11-17 14:28:34 來源:億速云 閱讀:157 作者:iii 欄目:開發技術

本篇內容介紹了“Pygame怎么使用精靈和碰撞檢測”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在開始學習相關知識點之前,我們有必要先學習精靈和碰撞檢測的含義。

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

Pygame怎么使用精靈和碰撞檢測

圖1:動作逐幀分解圖

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

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

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

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

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

# 創建精靈組
group = pygame.sprite.Group()
# 向組內添加一個精靈
group.add(sprite_one)

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

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

下面看一組簡單的示例,代碼如下所示:

import pygame
class Snake(pygame.sprite.Sprite):
    #定義構造函數
    def __init__(self,filename,location):
        # 調父類來初始化子類
        pygame.sprite.Sprite.__init__(self)
        # 加載圖片
        self.image = pygame.image.load(filename)
        # 獲取圖片rect區域
        self.rect = self.image.get_rect()
        # 設置位置
        self.rect.topleft=location
# 初始化pygame
pygame.init()
screen = pygame.display.set_mode((500,400))
pygame.display.set_caption('C語言中文網')
# 填充為白色屏幕
screen.fill((255,255,255))
filename ="C:/Users/Administrator/Desktop/snake.png"
location =(100,150)
snake1 = Snake(filename,location)
# 碰撞檢測,必須有兩個精靈,因此再創建一個精靈,并使用location來控制第二個精靈的位置
location_2 = (100,80)
snake2 = Snake('C:/Users/Administrator/Desktop/logo.png',location_2)
# 調用 collide_rect()進行矩形區域檢測,返回一個布爾值,碰撞返回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()

當精靈沒有發生碰撞時,程序的運行結果如下:

Pygame怎么使用精靈和碰撞檢測

圖2:運行結果

接下來,我們將 snake2 的location_2參數變為 (100,140),然后再次運行程序,這時兩個精靈就會發生碰撞,運行結果如下:

Pygame怎么使用精靈和碰撞檢測

圖3:運行結果

“Pygame怎么使用精靈和碰撞檢測”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蚌埠市| 柞水县| 启东市| 潞城市| 钟祥市| 天等县| 理塘县| 清远市| 广水市| 伊春市| 布尔津县| 宿迁市| 姜堰市| 漳浦县| 莎车县| 长寿区| 盘锦市| 阿拉尔市| 清流县| 嘉义市| 铜山县| 临高县| 监利县| 翁源县| 海南省| 蒲城县| 白玉县| 长宁县| 大渡口区| 洪雅县| 吉隆县| 城固县| 安仁县| 遂溪县| 光山县| 海安县| 乡宁县| 大关县| 桂林市| 交城县| 日土县|