两个精灵(一对一)之间的冲突检测
矩形检测
pygame.sprite.collide_rect(player, dragon) player和dragon是两个精灵 具体代码可参考 Python游戏编程入门的第七章EscapeTheDragon.py代码,矩形检测要求被检测对象有一个名为rect的Rect属性可用
矩形检测的变体
pygame.sprite.collide_rect_ratio(float_ratio)(first, second),float_ratio是一个额外的参数,我们可以用它来指定用于检测的矩形的百分比。当一个精灵的周围有很多空白空间的时候,这很有用,因为在这种情况下,我们想让矩形小一些
圆形检测
pygame.sprite.collide_circle(first, second)
pygame.sprite.collide_circle_ratio(float_ratio)(first, second)
具体的用法参考矩形检测即可,同样的圆形检测要求被检测对象有radius属性,如果还没有radius属性,那么该函数只是根据图形大小来计算半径
mask检测
pygame.sprite.collide_mask(first, second),一般不怎么用,这里不作过多解释,需要用的时候再查找对应的api说明
精灵和组之间的矩形冲突检测
pygame.sprite.spritecollide(sprite, group,True),第一个参数是精灵,第二参数是组,第三个参数bool值,传递True将会导致组中所有冲突的精灵都被删除掉,此时从组中删除的所有精灵都在列表中返回
collide_list = pygame.sprite.spritecollide(sprite, group,False)
该函数还有一个变体,pygame.sprite.spritecollideany,当与组中任何的精灵发生冲突的时候,它只是返回一个bool值,而不是一个在列表中返回所有冲突的精灵。因此只要发生一次碰撞冲突,它立即返回。
两个组之间的矩形冲突检测
hit_list = pygame.sprite.groupcollide(bombs, citys,True, False)
返回值是个字典,其中包含了键值对,第一个参数组中的每个精灵都会被添加到字典中,作为key,然后第二组中与之冲突的每个精灵,都会添加到字典key对应的value中。第三个第四个参数bool值则是指示发生冲突的时候,是否应该从第一组或者第二组中删除精灵