我正在开发一个游戏(导弹命令克隆),我需要检查(建筑物)是否与(导弹)surface
相撞。point
如何检查导弹是否击中建筑物?
ARect
有collidepoint
方法,但我希望它是像素完美的。
=> 使用 a Rect
=> => 但它应该是完美的像素 =>
我正在开发一个游戏(导弹命令克隆),我需要检查(建筑物)是否与(导弹)surface
相撞。point
如何检查导弹是否击中建筑物?
ARect
有collidepoint
方法,但我希望它是像素完美的。
=> 使用 a Rect
=> => 但它应该是完美的像素 =>
如果 (x,y) 处的位已设置,则返回非零值。
通过调用创建蒙版非常简单pygame.mask.from_surface
从给定的表面返回一个掩码。
使 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