-1
我目前正在使用pygame,並且我想創建多個sprite並檢查至少兩個碰撞。我想出了兩個while循環的想法,但最終變得非常複雜。還有其他方法可以嘗試嗎?檢查pygame中sprites中的多個碰撞
我目前正在使用pygame,並且我想創建多個sprite並檢查至少兩個碰撞。我想出了兩個while循環的想法,但最終變得非常複雜。還有其他方法可以嘗試嗎?檢查pygame中sprites中的多個碰撞
使用pygame.sprite.spritecollide
可以獲得與玩家碰撞的精靈列表,然後循環播放此列表以對碰撞的精靈進行操作。
還有groupcollide
,您可以使用它來檢測兩個精靈組之間的衝突。它返回一個帶有組1的精靈的字典作爲鍵和組2的碰撞精靈作爲值。
import sys
import pygame as pg
from pygame.math import Vector2
class Player(pg.sprite.Sprite):
def __init__(self, pos, *groups):
super().__init__(*groups)
self.image = pg.Surface((120, 60))
self.image.fill(pg.Color('dodgerblue'))
self.rect = self.image.get_rect(center=pos)
class Enemy(pg.sprite.Sprite):
def __init__(self, pos, *groups):
super().__init__(*groups)
self.image = pg.Surface((120, 60))
self.image.fill(pg.Color('sienna1'))
self.rect = self.image.get_rect(center=pos)
def main():
screen = pg.display.set_mode((640, 480))
clock = pg.time.Clock()
all_sprites = pg.sprite.Group()
enemy_group = pg.sprite.Group(Enemy((200, 250)), Enemy((350, 250)))
all_sprites.add(enemy_group)
player = Player((100, 300), all_sprites)
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
elif event.type == pg.MOUSEMOTION:
player.rect.center = event.pos
all_sprites.update()
# Check which enemies collided with the player.
# spritecollide returns a list of the collided sprites.
collided_enemies = pg.sprite.spritecollide(player, enemy_group, False)
screen.fill((30, 30, 30))
all_sprites.draw(screen)
for enemy in collided_enemies:
# Draw rects around the collided enemies.
pg.draw.rect(screen, (0, 190, 120), enemy.rect, 4)
pg.display.flip()
clock.tick(30)
if __name__ == '__main__':
pg.init()
main()
pg.quit()
sys.exit()
非常感謝您的回覆!這幫了很多!我是pygame的新手,有時需要編寫代碼。再次感謝。 –
歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [在主題](http://stackoverflow.com/help/on-topic)和[如何提問](http://stackoverflow.com/help/how-to-ask)適用於此處。 StackOverflow不是一個設計,編碼,研究或教程服務。 – Prune
另請參見發佈編碼問題的具體細節:[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。 我們應該能夠將發佈的代碼粘貼到文本文件中,並重現您描述的問題。 – Prune
你的遊戲是什麼?只要處理你的對象的位置,並比較它們。如果它們是相同的點,則會出現碰撞。您也可以使用顏色來檢查Unity中的碰撞情況。 – WaLinke