理由:
衝突テスト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 オブジェクトを管理する 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 サイトの他の関連記事を参照してください。