Python 在PyGame中,有没有一种使用颜色在形状之间进行碰撞的方法?

Python 在PyGame中,有没有一种使用颜色在形状之间进行碰撞的方法?,python,pygame,collision-detection,Python,Pygame,Collision Detection,在pygame中,当形状接触特定颜色时,是否有方法进行碰撞。例如,当一个形状受到某种控制时(例如:一个弹跳球、一个移动的形状等),是否有办法检测它是否接触了特定类型的颜色?是的,这里有一个来自sentdex的示例 链接: def正在触摸(b1、b2): 返回np.linalg.norm(np.array([b1.x,b1.y])-np.array([b2.x,b2.y])

在pygame中,当形状接触特定颜色时,是否有方法进行碰撞。例如,当一个形状受到某种控制时(例如:一个弹跳球、一个移动的形状等),是否有办法检测它是否接触了特定类型的颜色?

是的,这里有一个来自sentdex的示例 链接:

def正在触摸(b1、b2):
返回np.linalg.norm(np.array([b1.x,b1.y])-np.array([b2.x,b2.y])<(b1.size+b2.size)
def句柄_冲突(blob_列表):
蓝色、红色、绿色=斑点列表
对于蓝色\u id,蓝色\u blob为蓝色。复制()。项()
对于蓝色、红色、绿色的其他_blob:
对于other_blob_id,other_blob.copy().items()中的other_blob:
如果蓝色斑点==其他斑点:
通过
其他:
如果触摸(蓝色斑点、其他斑点):
蓝色斑点+其他斑点

如果是其他尺寸的,谢谢你的帮助!不知道你的理由,很难提出建议。如果对象具有静态颜色(例如:始终为绿色),您可以将它们拆分为单独的列表,然后仅对您感兴趣的颜色进行碰撞测试。对于动态颜色,我只会使用常规的几何碰撞,然后检查当前颜色,看看这是否仍然算作“命中”。
def is_touching(b1,b2):
    return np.linalg.norm(np.array([b1.x,b1.y])-np.array([b2.x,b2.y]))< (b1.size + b2.size)


def handle_collisions(blob_list):
    blues, reds, greens = blob_list
    for blue_id, blue_blob in blues.copy().items():
        for other_blobs in blues, reds, greens:
            for other_blob_id, other_blob in other_blobs.copy().items():
                if blue_blob == other_blob:
                    pass
                else:
                    if is_touching(blue_blob, other_blob):
                        blue_blob + other_blob
                        if other_blob.size <= 0:
                            del other_blobs[other_blob_id]
                        if blue_blob.size <= 0:
                            del blues[blue_id]
                            
    return blues, reds, greens