(建物) が (ミサイル) と衝突するかどうかを確認する必要があるゲーム (ミサイル コマンドクローン) を開発しています。surface
point
ミサイルが建物に命中したかどうかを確認するにはどうすればよいですか?
ARect
にはcollidepoint
方法がありますが、ピクセルパーフェクトにしたいです。
Rect
=> = > => を使用しますが、ピクセル パーフェクトにする必要があります =>
(建物) が (ミサイル) と衝突するかどうかを確認する必要があるゲーム (ミサイル コマンドクローン) を開発しています。surface
point
ミサイルが建物に命中したかどうかを確認するにはどうすればよいですか?
ARect
にはcollidepoint
方法がありますが、ピクセルパーフェクトにしたいです。
Rect
=> = > => を使用しますが、ピクセル パーフェクトにする必要があります =>
aMask
を使用して、そのget_at
メソッドを使用できます。
(x,y) のビットが設定されている場合は、0 以外を返します。
マスクの作成は非常に簡単です。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