矩形が完全にマスク内にあるかどうかを検出する方法は pygame にありますか?
rect 衝突と collidepoint (rect 衝突のポイント) に rect があることは知っていますが、rect がマスク内にあるかどうかを検出する方法はありますか?
ありがとう
それを行うためにpygameが提供する機能があるとは思いません。マスクの「形のない」可能性のために、それは確かにやや難しいでしょう. あなたのために働くかもしれない1つの可能性は、最初にマスクの境界四角形のリスト(マスクのすべてのポイントを一緒に「含む」四角形のリスト)を取得し、四角形がこれらの四角形のいずれかの中にあるかどうかを確認することです:
bounding_rects = mask.get_bounding_rects()
for b_rect in bounding_rects:
if b_rect.contains(test_rect):
print "Rect is inside mask"
もちろん、このソリューションでは、四角形がマスクの内側にあるが、特定の境界四角形の内側にない場合、テストは失敗します。精度が少し失われるというトレードオフを考慮して、これを処理する方法のアイデアを次に示します。
bounding_rects = mask.get_bounding_rects()
mask_rect = bounding_rects[0].unionall(bounding_rects)
if mask_rect.contains(test_rect):
print "Rect is inside mask"
このソリューションは、マスクのすべての境界四角形を 1 つの四角形に結合します。これにより、境界四角形がカバーしていない領域をカバーする可能性があります (2 つの四角形が互いに 10 ピクセルのギャップを持ち、結合されている場合、新しい四角形そのギャップが含まれます)