我正在开发一个游戏(missile command克隆),我需要检查一个surface
(一个建筑物)是否与一个point
(一个导弹)碰撞。
如何检查导弹是否撞击建筑物?
Rect
有collidepoint
方法,但我希望它是像素完美的。
=>使用Rect
=> =>但它应该是像素完美=>
答案 0 :(得分:7)
来创建掩码非常简单如果(x,y)处的位置位,则返回非零值。
从给定曲面返回一个Mask 使Surface的透明部分不设置,并设置不透明部分。
因此,给出了一些矢量数学的辅助方法:
def sub(u, v):
return [ u[i]-v[i] for i in range(len(u)) ]
使用以下代码检查给定点是否在掩码/表面内:
# create mask from surface
mask = pygame.mask.from_surface(building.surface)
# translate the position of the missile,
# since the top left coordinate of the mask is always (0, 0)
rel_point = sub(missile.position, building.position)
try:
if mask.get_at(rel_point):
# point in mask
do_something()
except IndexError:
pass