碰撞偵測與精靈定位故障排除
在您的程式碼中,您遇到兩個問題:collide_rect 函數總是傳回「True ”,甚至當它不應該時,代表精靈的矩形的位置似乎是(0, 0).
讓我們先解決碰撞偵測。 collide_rect 總是回傳「True」的原因是您沒有正確設定矩形的位置。 pygame.Surface.get_rect() 傳回一個具有表面尺寸的矩形對象,但它始終從 (0, 0) 開始。要將矩形放置在精靈的位置,您需要使用以下方法之一:
self.rect = self.image.get_rect(topleft=(self.x, self.y))
或
self.rect = self.image.get_rect() self.rect.topleft = (self.x, self.y)
透過設定矩形的topleft 屬性,您可以明確地將其與精靈的位置對齊。
至於不正確的精靈位置,您引入了不必要的 self.x 和 self.y 屬性。更好的做法是直接依賴矩形的位置。這是一個刪除屬性並在 get_rect() 呼叫中設定左上角位置的範例:
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 class Obstacle(pygame.sprite.Sprite): def __init__(self): pygame.sprite.Sprite.__init__(self) self.image = pygame.image.load("obstacle.png") self.rect = self.image.get_rect(topleft=(1000, 483))
此外,您可以選擇利用 pygame.sprite.Group 來處理精靈渲染和更新。這簡化了繪製過程,因為它繪製了群組中的所有精靈:
all_sprites = pygame.sprite.Group([obstacle, ball]) while not crashed: # [...] gameDisplay.fill((255,255,255)) all_sprites.draw(gameDisplay) pygame.display.flip() clock.tick(1000)
請注意,如果您使用Group,則可以刪除Ball.update() 和Obstacle.update() 方法,因為它們將處理更新精靈的位置並將影像繪製到顯示器上。
以上是為什麼我的 Pygame 碰撞偵測總是 True,為什麼我的精靈位於 (0, 0)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!