停止两个矩形交叉

时间:2017-01-22 22:05:31

标签: javascript html5-canvas

Two Rectangles

这个小世界包含一个人(蓝色矩形)和一个树(大绿色矩形)。可以通过按键盘上的上,下,左,右键来控制人。蓝色矩形仅在按下键时移动。蓝色矩形不得脱离地图(即不得离开灰色区域),并且不得与绿色矩形重叠。

我知道防止蓝色矩形离开灰色区域的方法:

if (blueRect.rightEdge >= (canvas.width - 1)) {
    // Don't allow going further to the right
    // But allow going up, down, and to the left
}

// Check the same thing for the other sides of the grey area

我不确定如何防止两个矩形交叉。 Two Rectangles

在上图中,如何“禁用”向右移动(防止交叉)?我仍然希望能够上,下,然后离开。

1 个答案:

答案 0 :(得分:3)

您正在处理的内容称为collision detection。我不相信总会有一个简单的答案。

但是,在您的情况下,因为您有简单的矩形,您可以检查 SMALLER 矩形的四个角中是否有任何一个位于 LARGER 矩形内

如果你不知道哪个更小,哪个更大,你可以检查两个方向(即矩形A在矩形B内的角落,然后如果是矩形B' s角在矩形A)内。确保使用> =和< =来捕捉那个讨厌的边界条件。

也许这样的事情是合适的(伪代码):

nextLocation = translate(rectangleA, "up")
if (isIntersecting(rectangleB, nextLocation)) {
    error("collision!")
} else {
    rectangleA = nextLocation
}