这个小世界包含一个人(蓝色矩形)和一个树(大绿色矩形)。可以通过按键盘上的上,下,左,右键来控制人。蓝色矩形仅在按下键时移动。蓝色矩形不得脱离地图(即不得离开灰色区域),并且不得与绿色矩形重叠。
我知道防止蓝色矩形离开灰色区域的方法:
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
在上图中,如何“禁用”向右移动(防止交叉)?我仍然希望能够上,下,然后离开。
答案 0 :(得分:3)
您正在处理的内容称为collision detection。我不相信总会有一个简单的答案。
但是,在您的情况下,因为您有简单的矩形,您可以检查 SMALLER 矩形的四个角中是否有任何一个位于 LARGER 矩形内
如果你不知道哪个更小,哪个更大,你可以检查两个方向(即矩形A在矩形B内的角落,然后如果是矩形B' s角在矩形A)内。确保使用> =和< =来捕捉那个讨厌的边界条件。
也许这样的事情是合适的(伪代码):
nextLocation = translate(rectangleA, "up")
if (isIntersecting(rectangleB, nextLocation)) {
error("collision!")
} else {
rectangleA = nextLocation
}