首頁 > 後端開發 > Python教學 > 為什麼我的 Pygame 碰撞偵測總是返回 True,以及為什麼我的影像矩形位置錯誤地設定為 (0, 0)?

為什麼我的 Pygame 碰撞偵測總是返回 True,以及為什麼我的影像矩形位置錯誤地設定為 (0, 0)?

Linda Hamilton
發布: 2024-12-18 12:57:11
原創
684 人瀏覽過

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 物件的rect屬性來決定它們是否相交。但是,程式碼中的 get_rect() 方法未正確將矩形的位置設為預期座標。

解決方案:

使用 get_rect() 時,您可以使用關鍵字參數指定位置或將其指派給矩形的左上角虛擬屬性。使用此修正後的程式碼:

self.rect = self.image.get_rect(topleft=(self.x, self.y))
登入後複製

不正確的矩形位置

原因:

您向精靈添加了不必要的x和y 屬性,而不是依賴在矩形的位置。結果,矩形的位置始終設定為 (0, 0),因為 Surface 物件沒有預設位置。

解決方案:

刪除 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 簡化程式碼

您可以透過使用 pygame.sprite.Group 來管理 Sprite 物件來進一步簡化程式碼。這將自動處理繪製和更新。

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板