原因:
碰撞測試依靠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
您可以透過使用 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中文網其他相關文章!