2012-04-28 24 views
6

Después de haber revisado la documentación y varios sitios de tutoriales, todavía no entiendo cómo se modifica el método sprite.collide con otra cosa que no sea la detección de colisiones rectangulares.¿Cómo se usa la colisión basada en círculos con los métodos de colisión grupal en Pygame?

Tengo un programa que necesita para detectar la colisión entre un "gancho" Sprite y uno cualquiera de un número de peces, almacenada en un grupo de sprite llamado "pescaditos"

que puedo usar:

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

para devolver una lista de sprites que colisionan utilizando los rectángulos delimitadores, pero quiero usar círculos o máscaras.

La documentación dice que puedo utilizar:

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

donde "chocó" es una función de devolución de llamada. Pero no puedo entender lo que eso significa. Simplemente escribiendo:

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

produce un error.

¿Alguien puede ayudar, o he entendido mal cómo se supone que funciona?

Respuesta

4

Creo que casi lo tiene, el problema es que está llamando al collide_circle en lugar de pasar la función. Pruebe algo como esto:

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

La única diferencia es la falta de paréntesis. Lo que pygame requiere para el parámetro collided es una función que toma dos sprites y devuelve un booleano que indica si colisionaron o no, por lo que puede pasar cualquier función que colisione dos sprites, incluso uno personalizado.

+0

Eso funciona, ¡gracias! –

Cuestiones relacionadas