我正在研究一个 breakout clone,我一直在尝试找出如何获得两个碰撞 rect 的交点 rect,这样我就可以测量球在 x 轴和 y 轴上进入 block 的深度并决定哪个我将反转的速度分量。
我想我可以像这样计算每种情况的深度:
但是如果我的十字路口是直的,那么我就不必担心球是从左/右 或上/下 击中方 block 的(因为我只会分别反转 x 和 y 轴),从而节省了我大量的输入。
我看过Pygame's docs但似乎它没有这个功能。我将如何着手解决这个问题?
请您参考如下方法:
假设你有矩形r1和 r2 , 与 .left, .right, .top, and .bottom边缘,然后
left = max(r1.left, r2.left);
right = min(r1.right, r2.right);
top = max(r1.top, r2.top);
bottom = min(r1.bottom, r2.bottom);
(通常坐标从上到下和从左到右增加)。最后,检查 left<right和 top<bottom , 并计算面积:
Area = (right - left) * (top - bottom);
或者,您可以使用 clip()函数。从您在问题中链接的文档:
clip(Rect) -> Rect Returns a new rectangle that is cropped to be completely inside the argument Rect. If the two rectangles do not overlap to begin with, a Rect with 0 size is returned.
