知道在碰撞列表中碰撞了哪个矩形

时间:2016-02-24 15:25:14

标签: python pygame collision-detection collision

当我的子弹接触到矩形时,我正试图在碰撞列表中找到一个特定的矩形。 我有92个rects,每个都有一个类型:“Opaque”,“Transparent”。 当我在游戏启动时创建rects时,我将它们放在一个列表中,然后测试collidelist。另一个列表按顺序包含所有类型。 像

collide_wall_list = [rect,rect,rect,rect]
#Each rect is a pygame.draw.rect

wall_type_list = ["Opaque","Opaque","Opaque","Transparent"]

它们按顺序创建,因此第二个rect是第二种类型。

if new_bullet_list[n].collidelist(collide_wall_list) != -1:

这是为了测试我的子弹是否与rects列表发生冲突。 现在,问题在于使用碰撞列表,我们无法知道碰撞的哪个部分正在碰撞。 你知道如何知道哪些是被碰撞的吗?然后对于类型来说它很容易,因为rects和类型处于相同的位置。

2 个答案:

答案 0 :(得分:2)

collidelist返回第一次碰撞的索引,如果没有碰撞,则返回-1:

"测试矩形是否与矩形序列中的任何一个发生碰撞。返回找到的第一个碰撞的索引。如果未找到任何冲突,则返回-1的索引。"

http://www.pygame.org/docs/ref/rect.html

答案 1 :(得分:0)

好的,显然你有一个函数可以检查是否发生了碰撞,返回-1?我不知道。但这是我的想法;试着让你的功能看起来像这样:

int IsCollision( "all your variables" + int n) { // n = the current rect's number
         if ("collision" == true) {
               return n;
            } else {
            return 0;
           }
}

当然,您现在需要将其他行更改为:

if new_bullet_list[n].collidelist(collide_wall_list) != 0: //colidelist will return "n", so the number of your rectangle. If that number is not equal to zero, a collision happened with your n'th rect.