2012-04-28 32 views
6

Sau khi đã xóa tài liệu và các trang hướng dẫn khác nhau, tôi vẫn không thể hiểu được cách bạn sửa đổi phương thức sprite.collide bằng bất kỳ thứ gì khác ngoài phát hiện xung đột hộp hình chữ nhật.Làm thế nào để bạn sử dụng va chạm dựa trên vòng tròn với các phương thức va chạm nhóm trong Pygame?

tôi có một chương trình mà cần phải phát hiện va chạm giữa một sprite "Hook" và bất kỳ một trong một số cá, lưu trữ trong một nhóm ma gọi là "cá kìa"

tôi có thể sử dụng:

for hit in pygame.sprite.spritecollide(self, self.fishies) 

để trả về danh sách các sprites va chạm sử dụng hình chữ nhật giới hạn, nhưng tôi muốn sử dụng vòng tròn hoặc mặt nạ.

Các tài liệu nói rằng tôi có thể sử dụng:

pygame.sprite.spritecollide(self, self.fishies, False, collided = None) 

nơi "va chạm" là một chức năng gọi lại. Nhưng tôi không thể hiểu được điều đó có nghĩa là gì. Chỉ cần viết:

pygame.sprite.spritecollide(sprite, group, dokill, pygame.sprite.collide_circle()) 

gây lỗi.

Bất kỳ ai có thể giúp đỡ hoặc tôi hiểu nhầm cách thức hoạt động của nó?

Trả lời

4

Tôi nghĩ rằng bạn gần như có nó - vấn đề là bạn đang gọi collide_circle thay vì chuyển chính hàm đó. Hãy thử một cái gì đó như thế này:

pygame.sprite.spritecollide(hook, fish, False, pygame.sprite.collide_circle) 

Sự khác biệt duy nhất là thiếu dấu ngoặc đơn. Những gì pygame yêu cầu cho tham số collided là một hàm nhận hai sprites và trả về một boolean cho biết chúng có va chạm hay không, vì vậy bạn có thể truyền bất kỳ hàm nào va chạm hai sprites, thậm chí một tùy chỉnh.

+0

Điều đó hoạt động, cảm ơn! –