0

私は小さな小さなサバイバルゲームを書いている最中です。波ごとにより多くの敵がやってくるので、敵があなたに同様のことをする前に、敵をなぎ倒すのがあなたの仕事です。

私が抱えている問題は、衝突検出にあります。「敵」クラスがあり、敵がお互いを通り抜けられないようにしたいと考えています。Pygame のコリジョン機能は、私が必要としているものに対応していないようです。特に関数は、敵クラス内の「no_merge」関数です。現時点では空白ですが、pygame ドキュメントで見つけることができる衝突検出のさまざまなバリアントをすべて試しましたが、同じグループに属する各スプライトをテストするものが見つからないようです。

コード内の no_merge() 関数が機能しない理由を知っています。それは常にそれ自体に対する衝突を常にチェックしていますが、これは常に true のままです。正しい方法を見つける (または考える) ことができないようです。

いくつかの追加情報: 最小数が約 20 で、最大数が約 100 の多数のスプライトになります。

現在の機能は次のとおりです。

    def no_merge(self):
    """Makes sure that the enemies cannot walk through each other"""
    if pygame.sprite.spritecollide(self,enemy_list,False) and enemy != self:
        do collision stuff.

これは、次のようにメイン ループに挿入されます。

while done == False # (this line hasn't indented properly on stack overflow)
for event in pygame.event.get():
    if event.type == pygame.QUIT:
        done = True
for bullet in bullet_list:
    bullet.rect.x +=4
for enemy in enemy_list:
    enemy.chase()
    enemy.in_screen
    enemy.destroy()
    enemy.no_merge()
4

1 に答える 1

0

敵にスプライトを使用している場合、私が考えることができる唯一のことは、どういうわけか実装することですpygame.sprite.spritecollide()

あなたの敵がスプライト グループに属している場合、これはそのグループのいずれかの悪意が衝突したかどうかをチェックします

spritecollide(sprite, group, dokill, collided = None)

  • group はスプライトのどのグループか

  • スプライトが衝突した場合、dokill は bool を返します。スプライトはグループから削除されます。

  • collided は、使用する衝突の種類です (collide_rect、collide_rect_ratio、collide_circle、collide_circle_ratio、collide_mask)

ここでもっと読むことができます

于 2013-07-04T10:06:48.180 に答える