<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
pygame中的精靈碰撞是可見遊戲中用的最基礎的東西,這裡結合官方檔案和小甲魚的網站上的內容做個小總結,方便日後使用。
Sprite(*groups) -> Sprite
Group(*sprites) -> Group
上面兩個基礎類別是pygame中最常用,相當輕量級,只為大多數遊戲常見的程式碼提供了一個起始點。
Sprite 類旨在用作遊戲中不同型別物件的基礎類別,為我們碰撞檢測做準備。還有一個基本的 Group 類,它只儲存 sprite 物件, 這樣方便不同型別的精靈進行碰撞檢測, 通常的操作 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
spritecollide(sprite, group, dokill, collided = None) -> Sprite_list
可用的回撥函數
collide_rect, collide_rect_ratio, collide_circle, collide_circle_ratio, collide_mask
collide_rect(left, right) -> bool
collide_rect_ratio(ratio) -> collided_callable
如果精靈具有 radius(半徑) 屬性,用於建立圓,否則會建立一個足夠大的圓,以完全包圍由 rect 屬性給出的精靈矩形。作為碰撞回撥函數傳遞給 *collide 函數。精靈必須具有 rect 和可選的 radius 屬性。
collide_circle(left, right) -> bool
兩個精靈之間的碰撞建立的可呼叫測試,通過測試以檢視以精靈為中心的兩個圓是否重疊,在通過儲存的比例縮放圓半徑之後。如果精靈具有 radius 半徑屬性,用於建立圓,否則會建立一個足夠大的圓,以完全包圍由 rect 屬性給出的精靈矩形。打算作為碰撞回撥函數傳遞給 *collide 函數。
精靈必須具有 rect 和可選的 radius 屬性。
collide_circle_ratio(ratio) -> collided_callable
通過測試它們的 bitmasks( pygame.mask.Mask.overlap()
) 是否重疊來測試兩個精靈之間的碰撞。 如果精靈具有 mask 屬性,該屬性用作 mask,否則將從精靈影象建立 mask 。 作為碰撞回撥函數傳遞給 *collide 函數。
精靈必須具有 rect 和可選的 mask 屬性。
如果要多次檢查碰撞,應該考慮在載入時為精靈建立一個mask。這將提高效能,否則這可能是一個昂貴的功能,因為它會在每次檢查碰撞時建立 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 - 查詢在兩個組之間發生碰撞的所有精靈。
Sprite.rect
attribute of each Sprite or by using the collided function if it is not None.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)
到此這篇關於pygame.sprite精靈碰撞的文章就介紹到這了,更多相關pygame.sprite精靈碰撞內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45