網(wǎng)站首頁 編程語言 正文
前言
pygame中的精靈碰撞是可見游戲中用的最基礎(chǔ)的東西,這里結(jié)合官方文檔和小甲魚的網(wǎng)站上的內(nèi)容做個小總結(jié),方便日后使用。
pygame.sprite.Sprite - 可見游戲?qū)ο蟮暮唵位悺?/h2>
Sprite(*groups) -> Sprite
- pygame.sprite.Sprite.add - 將精靈添加到組中
- pygame.sprite.Sprite.remove - 從組中刪除精靈
- pygame.sprite.Sprite.kill - 從所有組中刪除Sprite
- pygame.sprite.Sprite.alive - 精靈屬于任何組的檢測
- pygame.sprite.Sprite.groups - 包含此Sprite的組列表
- pygame.sprite.Sprite.update - 控制精靈行為的方法
Sprite(*groups) -> Sprite
pygame.sprite.Group - 用于保存和管理多個 Sprite 對象的容器類。
Group(*sprites) -> Group
- pygame.sprite.Group.sprites - 此組包含的 Sprite 列表
- pygame.sprite.Group.copy - 復(fù)制組
- pygame.sprite.Group.add - 將 Sprite 添加到此組
- pygame.sprite.Group.remove - 從組中刪除 Sprite
- pygame.sprite.Group.has - 測試一個 Group 是否包含 Sprite
- pygame.sprite.Group.update - 在包含的 Sprite 上調(diào)用 update 方法
- pygame.sprite.Group.draw - blit Sprite 的圖像
- pygame.sprite.Group.clear - 在 Sprites 上繪制背景
- pygame.sprite.Group.empty - 刪除所有 Sprite`
上面兩個基類是pygame中最常用,相當(dāng)輕量級,只為大多數(shù)游戲常見的代碼提供了一個起始點。
Sprite 類旨在用作游戲中不同類型對象的基類,為我們碰撞檢測做準(zhǔn)備。還有一個基本的 Group 類,它只存儲 sprite 對象, 這樣方便不同類型的精靈進(jìn)行碰撞檢測, 通常的操作 in / len / bool / iter 都對這個group使用。
in test if a Sprite is contained len the number of Sprites contained bool test if any Sprites are contained iter iterate through all the Sprites
pygame.sprite.spritecollide() - 在與另一個精靈相交的組中查找精靈
spritecollide(sprite, group, dokill, collided = None) -> Sprite_list
- 返回一個sprite列表,其中包含與另一個 Sprite 相交的 Group 中的所有 Sprite 。 通過比較每個 Sprite 的 Sprite.rect 屬性來確定交集。
- dokill 參數(shù)是一個布爾值。如果設(shè)置為 True,則將從組中刪除所有碰撞的 Sprite 。
- collided 碰撞參數(shù)是一個回調(diào)函數(shù),用于計算兩個精靈是否發(fā)生碰撞。 它應(yīng)該將兩個精靈作為值,并返回一個 bool 值,指示它們是否發(fā)生碰撞。 如果未傳遞碰撞,則所有精靈必須具有 rect 值,該值是 sprite 區(qū)域的矩形,將用于計算碰撞。
可用的回調(diào)函數(shù)
collide_rect, collide_rect_ratio, collide_circle, collide_circle_ratio, collide_mask
-
pygame.sprite.collide_rect - 使用 rects 檢測兩個精靈之間的碰撞。
- Collision detection between two sprites, using rects. 使用函數(shù)pygame rect colliderect檢測碰撞并將結(jié)果返回給*collide, 精靈必須具有 ‘rect’ 屬性。
collide_rect(left, right) -> bool
-
pygame.sprite.collide_rect_ratio - 使用按比例縮放的 rects 檢測兩個精靈之間的碰撞。
- Collision detection between two sprites, using rects scaled to a ratio. 使用 ratio 創(chuàng)建,然后將實例作為碰撞回調(diào)函數(shù)傳遞給 *collide 函數(shù)。
ratio 是浮點數(shù) - 1.0 是相同的大小,2.0 是兩倍大,0.5 是大小的一半。
- Collision detection between two sprites, using rects scaled to a ratio. 使用 ratio 創(chuàng)建,然后將實例作為碰撞回調(diào)函數(shù)傳遞給 *collide 函數(shù)。
collide_rect_ratio(ratio) -> collided_callable
-
pygame.sprite.collide_circle - 使用圓圈檢測兩個精靈之間的碰撞。
- *Collision detection between two sprites, using circles.*測試兩個精靈之間的碰撞,通過測試以查看精靈中心的兩個圓是否重疊。
如果精靈具有 radius(半徑) 屬性,用于創(chuàng)建圓,否則會創(chuàng)建一個足夠大的圓,以完全包圍由 rect 屬性給出的精靈矩形。作為碰撞回調(diào)函數(shù)傳遞給 *collide 函數(shù)。精靈必須具有 rect 和可選的 radius 屬性。
collide_circle(left, right) -> bool
-
pygame.sprite.collide_circle_ratio - 使用按比例縮放的圓圈檢測兩個精靈之間的碰撞。
- Collision detection between two sprites, using circles scaled to a ratio. 使用浮點數(shù) ratio 創(chuàng)建,然后將實例作為碰撞回調(diào)函數(shù)傳遞給 *collide 函數(shù)。ratio 是浮點數(shù) - 1.0 是相同的大小,2.0 是兩倍大,0.5 是大小的一半。
兩個精靈之間的碰撞創(chuàng)建的可調(diào)用測試,通過測試以查看以精靈為中心的兩個圓是否重疊,在通過存儲的比例縮放圓半徑之后。如果精靈具有 radius 半徑屬性,用于創(chuàng)建圓,否則會創(chuàng)建一個足夠大的圓,以完全包圍由 rect 屬性給出的精靈矩形。打算作為碰撞回調(diào)函數(shù)傳遞給 *collide 函數(shù)。
精靈必須具有 rect 和可選的 radius 屬性。
collide_circle_ratio(ratio) -> collided_callable
-
pygame.sprite.collide_mask - 使用蒙版在兩個精靈之間進(jìn)行碰撞檢測。
- *Collision detection between two sprites, using masks. *返回 masks 碰撞的 mask 上的第一個點,如果沒有碰撞,則返回 None 。
通過測試它們的 bitmasks( pygame.mask.Mask.overlap()
) 是否重疊來測試兩個精靈之間的碰撞。 如果精靈具有 mask 屬性,該屬性用作 mask,否則將從精靈圖像創(chuàng)建 mask 。 作為碰撞回調(diào)函數(shù)傳遞給 *collide 函數(shù)。
精靈必須具有 rect 和可選的 mask 屬性。
如果要多次檢查碰撞,應(yīng)該考慮在加載時為精靈創(chuàng)建一個mask。這將提高性能,否則這可能是一個昂貴的功能,因為它會在每次檢查碰撞時創(chuàng)建 mask 。
# Example of mask creation for a sprite. sprite.mask = pygame.mask.from_surface(sprite.image)
collide_mask(sprite1, sprite2) -> (int, int)
collide_mask(sprite1, sprite2) -> None
pygame.sprite.groupcollide - 查找在兩個組之間發(fā)生碰撞的所有精靈。
- Find all sprites that collide between two groups.
- This will find collisions between all the Sprites in two groups. Collision is determined by comparing the
Sprite.rect
attribute of each Sprite or by using the collided function if it is not None.
Every Sprite inside group1 is added to the return dictionary. The value for each item is the list of Sprites in group2 that intersect. 像這個格式{group1_sprite: group2_sprite} - 如果*collide沒有指定回調(diào)函數(shù),則所有的sprite需要有rect屬性
groupcollide(group1, group2, dokill1, dokill2, collided = None) -> Sprite_dict
EG: class Block(pygame.sprite.Sprite): # Constructor. Pass in the color of the block, # and its x and y position def __init__(self, color, width, height): # Call the parent class (Sprite) constructor pygame.sprite.Sprite.__init__(self) # Create an image of the block, and fill it with a color. # This could also be an image loaded from the disk. self.image = pygame.Surface([width, height]) self.image.fill(color) # Fetch the rectangle object that has the dimensions of the image # Update the position of this object by setting the values of rect.x and rect.y # give radius and mask attribute self.rect = self.image.get_rect() self.radius = self.rect.width / 2 self.mask = pygame.image.from_surface(self.image) class File(pygame.sprite.Sprite): # Constructor. Pass in the color of the block, # and its x and y position def __init__(self, color, width, height): # Call the parent class (Sprite) constructor pygame.sprite.Sprite.__init__(self) # Create an image of the block, and fill it with a color. # This could also be an image loaded from the disk. self.image = pygame.Surface([width, height]) self.image.fill(color) # Fetch the rectangle object that has the dimensions of the image # Update the position of this object by setting the values of rect.x and rect.y self.rect = self.image.get_rect() self.radius = self.rect.width / 2 self.mask = pygame.image.from_surface(self.image) block_group = pygame.sprite.Group() for i in range(5): block = Block(color, width, height) block_group.add(block) # there is another sprite group called file_group, which have same setting as block_group. file_group = pygame.sprite.Group() for i in range(5): file = File(color, width, height) file_group.add(file) # the collide check will like: hit_list1 = pygame.sprite.spritecollide(block, file_group, False, pygame.sprite.collide_rect hit_list2 = pygame.sprite.spritecollide(block, file_group, False, pygame.sprite.collide_rect_ratio(.75)) hit_list3 = pygame.sprite.spritecollide(block, file_group, False, pygame.sprite.collide_circle hit_list4 = pygame.sprite.spritecollide(block, file_group, False, pygame.sprite.collide_circle_ratio(.25)) hit_list5 = pygame.sprite.spritecollide(block, file_group, False, pygame.sprite.collide_mask # select the collided function whatever you like hit_list6 = pygame.sprite.spritecollide(block_group, file_group, False, False, pygame.sprite.collide_XXX)
總結(jié)
原文鏈接:https://blog.csdn.net/peanutfish/article/details/123935394
相關(guān)推薦
- 2022-08-29 Python繪制散點圖之可視化神器pyecharts_python
- 2022-12-05 C++語義copy?and?swap示例詳解_C 語言
- 2022-08-29 教你nginx跳轉(zhuǎn)配置的四種方式_nginx
- 2022-11-18 Python?數(shù)據(jù)清洗刪除缺失值替換缺失值詳情_python
- 2022-09-12 Go1.18新特性工作區(qū)模糊測試及泛型的使用詳解_Golang
- 2022-05-06 C#反射機制介紹_C#教程
- 2022-05-19 詳解QTreeWidget隱藏節(jié)點的兩種方式_C 語言
- 2023-06-02 Hadoop部署的基礎(chǔ)設(shè)施操作詳解_服務(wù)器其它
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支