ホームページ > バックエンド開発 > Python チュートリアル > Pygame で弾丸とスプライトの衝突を検出して処理する方法は?

Pygame で弾丸とスプライトの衝突を検出して処理する方法は?

Susan Sarandon
リリース: 2024-12-28 19:42:10
オリジナル
450 人が閲覧しました

How to Detect and Handle Bullet-Sprite Collisions in Pygame?

PyGame で弾丸とスプライト間の衝突を検出するにはどうすればよいですか?

PyGame では、pygame.Rect オブジェクトを使用して衝突を検出できます。 Rect オブジェクトには、2 つのオブジェクト間の衝突、さらには長方形と円形のオブジェクト間の衝突を検出するためのメソッドが多数含まれています。

いくつかの例:

  1. pygame.Rect.collidepoint: ポイントが内部にあるかどうかをテストします。 Rectangle.

    • repl.it/@Rabbid76/PyGame-collidepoint
    • [画像](https://i.sstatic.net/5jD 0C.png)
    • [Gif](https://i.sstatic.net/wCi2z.gif)
  2. pygame.Rect.衝突 : 2 つの長方形かどうかをテストします。オーバーラップ。

    • repl.it/@Rabbid76/PyGame-colliderect
    • [画像](https://i.sst atic.net/5jD0C.png)
    • [Gif](https://i.sstatic.net/r2y9r.gif)

用pygame.sprite.Sprite オブジェクトと pygame.sprite.Group オブジェクト間の衝突には、pygame.sprite.spritecollide()、pygame.sprite.groupcollide()、または pygame.sprite.spritecollideany() を使用できます。これらのメソッドを使用する場合、衝突検出アルゴリズムは、collided 引数によって指定できます。

collided 引数は、2 つのスプライトが衝突しているかどうかを計算するために使用されるコールバック関数です。

衝突可能なパラメータは、collide_rect、collide_rect_ratio、collide_circle、 collide_circle_ratio、collide_mask.

一部例:

  1. pygame.sprite.spritecollide():

    • repl.it/@Rabbid76/PyGame-spritecollide
    • [画像](ht tps://i.sstatic.net/5jD0C.png)
    • [Gif](https://i.sstatic.net/3DdjL.gif)
  2. pygame.sprite.spritecollide() / collide_circle:

    • repl.it/@Rabbid76/PyGame-spritecollidecolidecircle
    • [画像]( https://i.sstatic.net/5jD0C.png)
    • [Gif](https://i.sstatic.net/SS1Pb.gif)

で特定のケースでは、弾丸とスプライトの間の衝突を検出し、スプライトと弾丸の両方を削除するには、pygame.sprite.spritecollide() と pygame.sprite.Group:

# [...]

my_sprite = Sprite(sx, sy, name)
my_bullet = Bullet(by, by)

bullet_group = pygame.sprite.Group(my_bullet)
sprite_group = pygame.sprite.Group(my_sprite)

while True:
    # [...]

    collisions = pygame.sprite.spritecollide(my_bullet, sprite_group, True)

    for sprite in collisions:
        sprite_group.remove(sprite)
ログイン後にコピー
を使用できます。

以上がPygame で弾丸とスプライトの衝突を検出して処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート