人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

Pygame如何使用精靈和碰撞檢測

發(fā)布日期:2021-12-10 07:27 | 文章來源:腳本之家

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

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


圖1:動作逐幀分解圖

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

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

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

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

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

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

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

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

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

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)
# 碰撞檢測,必須有兩個精靈,因此再創(chuàng)建一個精靈,并使用location來控制第二個精靈的位置
location_2 = (100,80)
snake2 = Snake('C:/Users/Administrator/Desktop/logo.png',location_2)
# 調(diào)用 collide_rect()進行矩形區(qū)域檢測,返回一個布爾值,碰撞返回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ā)生碰撞時,程序的運行結(jié)果如下:


圖2:運行結(jié)果

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


圖3:運行結(jié)果

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

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

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部