7

ドキュメントとさまざまなチュートリアル サイトを精査しましたが、sprite.collide メソッドを長方形のバウンディング ボックスの衝突検出以外の方法で変更する方法については、まだ理解できません。

スプライト「フック」と「fishies」と呼ばれるスプライト グループに格納されている多数の魚のいずれかとの衝突を検出する必要があるプログラムがあります。

使うことができます:

for hit in pygame.sprite.spritecollide(self, self.fishies)

境界の長方形を使用して衝突するスプライトのリストを返しますが、円またはマスクを使用したいです。

ドキュメントには、使用できると書かれています:

pygame.sprite.spritecollide(self, self.fishies, False, collided = None)

「衝突」はコールバック関数です。しかし、それが何を意味するのか理解できません。簡単に書く:

 pygame.sprite.spritecollide(sprite, group, dokill, pygame.sprite.collide_circle())

エラーが発生します。

誰か助けてもらえますか、それともどのように機能するのか誤解していますか?

4

1 に答える 1

7

あなたはほとんどそれを持っていると思います-問題はcollide_circle、関数自体を渡す代わりに呼び出していることです。次のようなことを試してください:

pygame.sprite.spritecollide(hook, fish, False, pygame.sprite.collide_circle)

構文の唯一の違いは、括弧が省略されていることです。パラメータに pygame が必要とするのcollidedは、2 つのスプライトを受け取り、それらが衝突したかどうかを示すブール値を返す関数です。そのため、2 つのスプライトを衝突させる任意の関数 (カスタム スプライトであっても) を渡すことができます。

于 2012-04-28T14:38:29.913 に答える