1
我正在開發一個遊戲(missile command克隆),我需要檢查surface
(建築物)是否與point
(導彈)相碰撞。檢查一個點是否與pygame中的曲面(像素完美)相撞
我如何檢查導彈擊中建築物?
A Rect
有collidepoint
方法,但我希望它是像素完美。
=使用Rect
=> =>但它應該是完美的像素> =>
我正在開發一個遊戲(missile command克隆),我需要檢查surface
(建築物)是否與point
(導彈)相碰撞。檢查一個點是否與pygame中的曲面(像素完美)相撞
我如何檢查導彈擊中建築物?
A Rect
有collidepoint
方法,但我希望它是像素完美。
=使用Rect
=> =>但它應該是完美的像素> =>
如果(x,y)位置位,則返回非零值。
創建一個面具是通過調用pygame.mask.from_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