[pygame]对象碰撞检测(二)

Plux posted @ 2009年2月06日 21:02 in Design with tags pygame python , 3823 阅读

上一篇文章写了一个不完整的介绍,现在继续写它,当然,也是不完整的。

其实都是pygame 1.8.1更新的函数,由于没有中文资料,写写吧……虽然现在英文文档已经更新了。

以下所说的Sprite指的是继承了pygame.sprite.Sprite类的对象。

PyGame 1.8.1提供的新函数/类: 

pygame.sprite.collide_rect_ratio(ratio): return collided_callable
pygame.sprite.collide_circle(left, right): return bool
pygame.sprite.collide_circle_ratio( object ): return collided_callable

就写这三个吧。


pygame.sprite.collide_rect_ratio(ratio): return collided_callable

用于把Sprite的面积(rect属性,继承自pygame.Rect类)扩大ratio倍再进行比较,返回的是一个函数。它不会对Sprite的rect进行真实的扩大/缩小。

返回的函数可以作为

pygame.sprite.spritecollide(sprite, group, dokill, collided = None): return Sprite_list

中collided参数使用的(见上一篇文章)。但注意的是,这个不是一个函数,而是一个类,collided参数用的是这个类的实例,和上篇文章不同。
简化了自己编写自定义碰撞检测的麻烦,不过该函数仅仅对两个Sprite的rect扩大ratio倍再比较面积是否相交。

与之相似的是

pygame.sprite.collide_circle_ratio( ratio ): return collided_callable

不过,这个函数要求Sprite必须有radius属性(半径),根据半径扩大ratio倍。

这也是个类,定义与用法与pygame.sprite.collide_rect_ratio(ratio): return collided_callable相似。


pygame.sprite.collide_circle(left, right): return bool

left和right分别代表一个Sprite,事实上与Sprite所处的位置并没有要求(并不是规定left和right)。但这两个Sprite需要有额外的radius属性(表明半径)。

返回一个boolean(是否相交的布尔值)。这个函数也可以作为

pygame.sprite.spritecollide(sprite, group, dokill, collided = None): return Sprite_list

的collided参数使用。但和上两个类不同,这是一个函数,需要把这个函数的引用作为参数(例如:collided = pygame.sprite.collide_circle不需要括号)。


其实这些类或许在实际使用pygame模块没有什么用处,不过提供给我们一个对游戏中对象碰撞检测的参考~~~

 

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter