ホームページ > バックエンド開発 > Python チュートリアル > Pygame の衝突検出が常に True を返すのはなぜですか?また、画像の四角形の位置が誤って (0, 0) に設定されるのはなぜですか?

Pygame の衝突検出が常に True を返すのはなぜですか?また、画像の四角形の位置が誤って (0, 0) に設定されるのはなぜですか?

Linda Hamilton
リリース: 2024-12-18 12:57:11
オリジナル
681 人が閲覧しました

Why Does My Pygame Collision Detection Always Return True, and Why Is My Image Rectangle Position Incorrectly Set to (0, 0)?

衝突テストが常に「True」を返し、画像四角形の位置が常に間違っている理由 (0, 0)

衝突テストの問題

理由:

衝突テストSprite オブジェクトのect 属性に基づいて、それらが交差するかどうかを判断します。ただし、コード内の get_rect() メソッドは、四角形の位置を意図した座標に適切に設定しません。

解決策:

get_rect() を使用する場合では、キーワード引数を使用して位置を指定するか、四角形の左上の仮想属性に位置を割り当てることができます。この修正されたコードを使用してください:

self.rect = self.image.get_rect(topleft=(self.x, self.y))
ログイン後にコピー

長方形の位置が正しくありません

理由:

信頼する代わりに、スプライトに不要な x および y 属性を追加しました長方形の位置について。その結果、Surface オブジェクトにはデフォルトの位置がないため、長方形の位置は常に (0, 0) に設定されます。

解決策:

x 属性と y 属性を削除します。そして、rect 属性を使用して Sprite オブジェクトの位置を設定します。修正されたコードは次のとおりです。

class Ball(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("ball.png")
        self.rect = self.image.get_rect(topleft=(280, 475))
        self.col = False
ログイン後にコピー

Sprite Group を使用した簡略化されたコード

Sprite オブジェクトを管理する pygame.sprite.Group を使用すると、コードをさらに簡素化できます。これにより、描画と更新が自動的に処理されます。

obstacle = Obstacle()
ball = Ball()

# Create a sprite group and add the sprites to it.
all_sprites = pygame.sprite.Group([obstacle, ball])

while not crashed:
    # [... event handling and game logic]

    gameDisplay.fill((255, 255, 255))

    # Draw all sprites using the group's draw method.
    all_sprites.draw(gameDisplay)

    # [... other game loop tasks]
ログイン後にコピー

以上がPygame の衝突検出が常に True を返すのはなぜですか?また、画像の四角形の位置が誤って (0, 0) に設定されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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