ホームページ >バックエンド開発 >Python チュートリアル >Pygame で箇条書きとスプライトのリスト間の衝突を検出するにはどうすればよいですか?

Pygame で箇条書きとスプライトのリスト間の衝突を検出するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-19 02:15:09677ブラウズ

How to Detect Collisions Between Lists of Bullets and Sprites in Pygame?

PyGame での衝突検出

質問: 提供されたメソッドを使用して弾丸のリストとスプライトのリストの間の衝突を検出する方法クラス?

解決策:

PyGame には、次のような衝突を検出するためのメソッドがいくつか用意されています。

Rect Object Methods

  • pygame.Rect.collidepoint: かどうかをテストします。ポイントは四角形の中にあります。
  • pygame.Rect.colliderect: 2 つの四角形が重なっているかどうかをテストします。
  • pygame.Rect.collidelist および pygame.Rect.collidelistall: 間の衝突をテストします。四角形と四角形のリスト。

スプライト衝突メソッド

  • pygame.sprite.spritecollide(): 衝突をテストします。スプライトとグループの間sprites.
  • pygame.sprite.groupcollide(): 2 つのスプライト グループ間の衝突をテストします。
  • pygame.sprite.spritecollideany():スプライトとスプライトのメンバー間の衝突をテストします。 group.

コード内の衝突の検出

指定された Sprite クラスと Bullet クラス間の衝突を検出するには、pygame.Rect.colliderect を使用できます。メソッド:

# Initialize sprite and bullet
my_sprite = Sprite(sx, sy, name)
my_bullet = Bullet(by, by)

# Main loop
while True:
    # [...]

    # Check for collision between sprite and bullet
    if my_sprite.rect.colliderect(my_bullet.rect):
        print("Hit")

ヒント:

  • 位置決めに pygame.Rect オブジェクトを使用するように Sprite クラスと Bullet クラスを調整し、不要な x と y を削除します。属性:
class Sprite:
    def __init__(self, x, y, name):
        self.image = pygame.image.load(name)
        self.rect = self.image.get_rect(topleft=(x, y))
    # ...

class Bullet:
    def __init__(self, x, y):
        self.bullet = pygame.image.load("user_bullet.BMP")
        self.rect = self.bullet.get_rect(topleft=(x + 23, y))
    # ...

以上がPygame で箇条書きとスプライトのリスト間の衝突を検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。