1

我有一个代表汽车的小精灵,它周围有六个点用于空间感知。如何根据颜色跟踪点,以便测试与矩形的碰撞?

左边两点是纯洋红色,前面两点是纯红色,右边两点是纯绿色 * (255, 0, 255) ;(255, 0, 0) ; (0, 255, 0)

    im = Image.open('CarSprite.png')
    im = im.convert('RGBA')

    data = np.array(im)
    red, green, blue, alpha = data.T

    black_areas = (red == 0) & (blue == 0) & (green == 0)
    data[..., :-1][black_areas.T] = (random.randint(50,250), random.randint(50,250), random.randint(50,250)) # Converts black to random colors

    im2 = Image.fromarray(data)
    mode = im2.mode
    size = im2.size
    data = im2.tobytes()
4

1 回答 1

3

我意识到我没有直接回答你的问题......

这种碰撞的最好方法是首先检查精灵边界矩形上的碰撞。这是一种有效的检查,因为如果底矩形没有碰撞,就没有理由检查六个控制点。

Pygame rect 类colliderect()已经支持使用成员函数进行这种检测。

一旦代码确定发生了基本级别的碰撞,然后对您的六个控制点中的每一个使用rect.collidepoint()函数(显然考虑了精灵的当前位置)。

您可能还想研究使用碰撞位掩码以获得更准确的像素级碰撞。

于 2019-09-02T22:27:02.193 回答