我创建了一个迷宫游戏,用户必须控制球并将其移动通过迷宫。我遇到的问题是,当球与墙壁碰撞时,它不应穿过墙壁。我已经能够使用以下方法检测到碰撞: https://stackoverflow.com/a/402010/11365940
我不确定如何防止球越过墙壁。
我曾尝试做类似的事情
BALL_X = wall.left - BALL_RADIUS;
仅当球的右侧击中墙壁的左侧时有效。 但是我不知道该如何检测。 我只知道如何检测碰撞。
这是我编写的一些用于检测冲突的代码。
for (Rect wall : walls) {
double wallWidth = wall.right - wall.left;
double wallHeight = wall.bottom - wall.top;
double wallX = wallWidth / 2 + wall.left;
double wallY = wallHeight / 2 + wall.top;
double circleDistanceX = Math.abs(BALL_X - wallX);
double circleDistanceY = Math.abs(BALL_Y - wallY);
if (circleDistanceX > wallWidth / 2 + BALL_RADIUS) {
continue;
}
if (circleDistanceY > wallHeight / 2 + BALL_RADIUS) {
continue;
}
if (circleDistanceX <= wallWidth / 2) {
// collision here
}
if (circleDistanceY <= wallHeight / 2) {
// collision here
}
double cornerDistanceSq = Math.pow(circleDistanceX - wallWidth, 2) +
Math.pow(circleDistanceY - wallHeight, 2);
if (cornerDistanceSq <= BALL_RADIUS) {
// collision here
}
}
答案 0 :(得分:0)
因此,您必须始终检测它们是否相互重叠,这是代码
if(Math.abs(circle.CircleCenterY - rectangle.top) < circle.radius) {
if(circle.CircleCenterX >= rectangle.left) {
if(circle.CircleCenterY <= rectangle.right) {
// circle touched the top edge
}
else {
// circle touched the right corner
}
}
else {
// circle touched the top left corner
}
}