PyGame 1.7在pygame.sprite里为碰撞检测提供了三个函数:
spritecollide(sprite, group, dokill)
sprite - pygame.sprite.Sprite对象
group - pygame.sprite.Group对象(或其子类对象)
dokill - 是否杀死group中与sprite碰撞的sprite对象
返回包含所有group中与sprite相撞的sprite的列表(list)
groupcollide(groupa, groupb, dokilla, dokillb)
groupa - pygame.sprite.Group对象(或其子类对象)
groupb - pygame.sprite.Group对象(或其子类对象)
dokilla - 是否杀死groupa中与groupb中碰撞的sprite对象
dokillb - 是否杀死groupb中与groupa中碰撞的sprite对象
返回包含所有groupa中与groupb相撞的sprite的字典(dict)
spritecollideany(sprite, group)
和spritecollide(sprite, group, dokill)相似,但只是返回group中最第一个与sprite相碰撞的sprite。
上面的工作原理是检测sprite.rect是否与group中的sprite.rect是否重叠。然而,有时候也许太死板了。sprite.rect是与绘制相关的,但不一定就是sprite的范围,难道就要重写一个吗?
在PyGame,我们终于可以自定碰撞了。
pygame.sprite.spritecollide(sprite, group, dokill, collided=None)
pygame.sprite.groupcollide(group1, group2, dokill1, dokill2, co