브레이크 아웃 충돌 : 충돌 측면 감지


10

나는 브레이크 아웃 클론 (첫 번째 게임)을 작성하고 있으며 벽돌의 어느 쪽이 맞았는지 알아내는 데 완전히 붙어 있습니다.

다음과 같은 충돌 감지 방법이 있습니다.

DetectCollision(Object a, Object b)

   x = distance(a.x, b.x);
   y = distance(a.y, b.y);

   if (x is smaller than the combined width &  y is smaller is than combined height {
       return true;
   }
return false;  

이것은 완전히 잘 작동하지만 충돌의 측면과 중심에 대한 위치를 알아야 제대로 응답 할 수 있습니다.

지난 몇 일 동안 스누핑을했지만 길을 잃었습니다.

답변:


13

이것은 모두 충돌 한 벽돌의 위치와 관련하여 공의 위치에서 수집 할 수 있습니다.

충돌이 감지되면 :

if(ballPosition.y <= brickPosition.y - (brickHeight/2))
  //Hit was from below the brick

if(ballPosition.y >= brickPosition.y + (brickHeight/2))
  //Hit was from above the brick

if(ballPostion.x < brickPosition.x)
  //Hit was on left

if(ballPostion.x > brickPosition.x)
  //Hit was on right

처음 두 개는 공이 벽돌 위 또는 아래에 있는지 확인합니다. 벽돌 옆에 둘 중 어느 것도 있어야하지 않으면 벽돌이 어느쪽에 있는지 확인하십시오. brickPosition은 브릭의 중심이거나 brickPosition은 왼쪽 상단 모서리에 있습니다.


1
그러나 플레이어가 벽돌 안에서 움직이기 때문에 플레이어를 재배치하는 데 어떻게 이것을 사용합니까? 여러 조건이 충족되고 원하는 x를 벽의 가장자리로 재설정하면 예를 들어 키를 누르는 경우 벽돌의 벽 옆에 원하는 x를 정확하게 설정하면 캐릭터의 이론적 위치를 확인하여 충돌 방향을 확인하면 여러 조건이 충족되므로 실제로 작동하지 않습니다. 이것을 사용하여 플레이어를 재설정하십시오. 모든 경우 끝에 다른 것을 추가해야합니까?)
bluejayke

내가 아는 한 브레이크 아웃 타입 게임에서 "플레이어"는 패들입니다. 패들이 벽돌 내부에서 움직이지 않으며 공이 벽돌과 상호 작용하여 패들의 위치를 ​​변경하지도 않습니다. 그것이 당신이하고있는 일이라면 추가 논리가 필요하지 않으며 모든 충돌 검사를 완료 할 때까지 재배치를 처리하지 마십시오. 또는 수표 중 하나에 해당하면 반환하십시오.
MichaelHouse

8

Vector Math를 사용하여 그들 사이의 각도를 발견 할 수 있습니다!

짧은 답변은 다음과 같습니다.

ballToBrick = ballPosition - brickPosition;
ballToBrick.Normalize();
brickFacing = Vector2(0,1).Normalize();


float angle = acos( Dot(ballToBrick, brickFacing) );

브릭 페이싱은 까다로운 벡터이며 각도 계산의 "시작점"입니다. 벡터가 위를 가리 키도록하려면 (0, 1), 왼쪽 (-1, 0), 오른쪽 (1, 0), 아래 (0, -1)를 지정하십시오. 위와 오른쪽이 양수인 OpenGL 축에 있다고 가정합니다.

모르는 경우 사용되는 각 함수의 정의는 다음과 같습니다.

Vector2.Normalize()
{
    float length = squareroot(x * x + y * y);
    x = x / length;
    y = y / length;
    return this;
}

Dot(Vector2 a, Vector2 b)
{
    return a.x * b.x + a.y * b.y;
}

( https://en.wikipedia.org/wiki/Dot_product )

참조 : http://blog.wolfire.com/2009/07/linear-algebra-for-game-developers-part-2/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.