나는 AABB 충돌에 대해 읽었습니다. 나는 그 순간을 아주 거칠게 구현했다. 이제 두 개의 직사각형이 X 축과 Y 축에서 교차 할 때를 감지 할 수 있습니다.AABB 충돌 해결
overlapX = (Game1.p[0].boundingBox.halfWidth + Game1.p[1].boundingBox.halfWidth)
- (Math.Abs(Game1.p[0].boundingBox.center.X - Game1.p[1].boundingBox.center.X));
를 내가 어디에 문제가보고 싶은대로 지금 난 그냥 X에 깊이를 테스트입니다 :
나는 기본적으로 수행 X에 교차로의 깊이를 계산합니다. 나는 좌우 방향을 고려하지 않고있다. 나는 p [0] 객체가 p [1]의 왼쪽에 충돌하고 있다고 가정하고 있습니다.그런 다음 실제 움직임과 충돌 탐지를 위해 : 나는 p[1]
와 충돌 할 때
public void Move(float x, float y)
{
Position.X += x;
Position.Y += y;
overlapX = (Game1.p[0].boundingBox.halfWidth
+ Game1.p[1].boundingBox.halfWidth)
- (Math.Abs(Game1.p[0].boundingBox.center.X
- Game1.p[1].boundingBox.center.X));
overlapY = (Game1.p[0].boundingBox.halfHeight
+ Game1.p[1].boundingBox.halfHeight)
- (Game1.p[1].boundingBox.center.Y
- Game1.p[0].boundingBox.center.Y);
if (Collision.testAABBAABBX(
Game1.p[0].boundingBox, Game1.p[1].boundingBox) &&
Collision.testAABBAABBY(
Game1.p[0].boundingBox, Game1.p[1].boundingBox))
{
if (overlapX < overlapY) Position.X -= overlapX;
}
}
지금,
overlapX
1. 그래서
position.X
해야
-= 1
을 읽습니다. 그러나 여기에서 문제가 시작됩니다. 겹치는 동안 이미지가 있습니다. 당신은 참으로 수직 노란색 선으로 표시 중복이 있음을 볼 수 있습니다
그래서 Overlap http://s9.postimage.org/495f1fmv3/overlap.png
내 문제는 내가 중복 값으로 다시 이동합니다 position.X
을 지시 할 때, 그렇지, 적어도 않는 것을 직사각형을 위 또는 아래로 움직일 때까지. 무슨 일이 일어나고 있는지에
No overlap http://s7.postimage.org/wzg3sixaz/no_overlap.png
모든 단서 : 나는 그렇게 할 경우, 마술 저절로 해결? 어쩌면 그것은 내 앞에 있으며 나는 그것을 보지 않을 것이지만, 그 반응은 다음 운동 후에 만 나타난다.
자세한 정보가 필요한 경우 알려주십시오.
죄송 합니다만 AABB 충돌 감지는 'Rectangle.Intersects()'와 동일합니까? – user1306322