【Python游戏编程入门笔记2】pygame.sprite.Sprite类的冲突检测

两个精灵(一对一)之间的冲突检测

矩形检测

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值则是指示发生冲突的时候,是否应该从第一组或者第二组中删除精灵

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值