2017-07-11 14 views
-1

現在、私はpygameを使っています。複数のスプライトを作成し、少なくとも2つの衝突をチェックしたいと思います。私は2つのwhileループを持つという考えを思いついたが、それは本当に複雑になった。私はそれを試すことができる他の方法はありますか?pygameのスプライトで複数の衝突をチェックする

+0

ようこそStackOverflow。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [on topic](http://stackoverflow.com/help/on-topic)および[How to Ask](http://stackoverflow.com/help/how-to-ask)をここで適用してください。 StackOverflowは、デザイン、コーディング、リサーチまたはチュートリアルサービスではありません。 – Prune

+0

コーディングの問題を投稿する際の詳細については、[最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve)を参照してください。 MCVEコードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 投稿したコードをテキストファイルに貼り付け、説明した問題を再現できるはずです。 – Prune

+0

あなたの試合は何ですか?あなたのオブジェクトの位置を処理し、それらを比較するだけです。同じポイントの場合は、衝突が表示されます。色を使用して、Unityのように衝突をチェックすることもできます。 – WaLinke

答えて

0

pygame.sprite.spritecollideを使用して、プレーヤーと衝突するスプライトのリストを取得し、衝突したスプライトで何かを行うためにこのリストをループします。

また、2つのスプライトグループ間の衝突を検出するために使用できる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() 
+0

返信いただきありがとうございます!それはたくさんの助けになりました!私はパイゲームでは新しく、時にはコーディングに問題があります。再度、感謝します。 –

関連する問題