2016-07-10 4 views
1

은 내가에서 AABB 충돌 감지를 구현하기 위해 노력하고 차원의 OpenGL 게임을 작동 충돌 감지 코드되지 않습니다OpenGL은 2D 충돌 감지 여기

boolean collisionX = position.x + size.x + dx >= collision.position.x && collision.position.x + collision.size.x >= position.x + dx; 
boolean collisionY = position.y + size.y + dy >= collision.position.y && collision.position.y + collision.size.y >= position.y + dy; 
return collisionX && collisionY; 

크기에 내가이 계산을 사용하고 있습니다 왜냐하면 이러한 스프라이트 중 일부는 텍스처 아틀라스에서 가져온 것이기 때문입니다. 텍스처 아틀라스의 높이와 폭이 동일하기 때문에이 2^X 정사각형이므로

size.x = pixelWidth * scaleX/modelTexture.spriteWidth, 
size.y = pixelHeight * scaleY/modelTexture.spriteWidth 

는 I는 모두 modelTexture.spriteWidth를 사용한다.

PixelWidth 및 PixelHeight은 텍스처에있는 이미지의 픽셀 크기이며 나로 계산됩니다.

내가 잘못 생각하면 문제가 이러한 계산으로 인해 발생할 수 있다고 생각합니다. 저에게 알려주세요.

그러나 모든 Sprite의 경계 상자가 가운데에서 시작하여 오른쪽 상단으로 확장되는 것처럼 충돌 감지가 잘못된 위치에서 발생하는 것처럼 보입니다. 나는 -size/2f와 같은 변위 벡터를 사용하여이를 설명하려고 노력했다. 그러나 불행하게도 그것은 아무것도 바뀌지 않았습니다. 여기

이 표시되지 않습니다 충돌의 예 제대로 alligned 수있다 :

enter image description here

당신은 문제가 스프라이트/객체의 근원이 될 수 있다고 생각하십니까? 어느 쪽이 중심에 있습니다. 그렇다면 원점을 어떻게 왼쪽 상단으로 설정합니까?

+0

기본 방법 중 하나를 시도, 예를 들어, 'boolean intersects = new Rectangle (x1, y1, width1, height1) .intersects (새로운 Rectangle (x2, y2, width2, height2));'java.awt'에서부터 어떻게되는지보기 –

+0

크기에 따라 순위를 조정해야 할 것입니까? –

+0

'position.x + size.x + dx> = collision.position.x && collision.position.x + collision.size.x> = position.x + dx;'여기서'||'가되어서는 안됩니다. ? (Y와 같음) 코드를 읽는 직관, 나는 수학을 수행하지 않았습니다. – Zouch

답변

0

나는 한쪽면과의 충돌을 검증한다고 생각합니다. 충돌을 확인하려면 당신은 그렇게 somethint을 수행해야합니다 귀하의 경우

collisionX = (right_side_Obj1 > left_side_Obj2 && left_side_Obj1 < left_side_Obj2) 
|| (left_side_Obj1 < right_side_Obj2 && right_side_Obj1 > right_side_Obj2); 

을 내가 그것을해야한다고 생각 :

boolean collisionX = (position.x + size.x + dx >= collision.position.x 
      && position.x <= collision.position.x) 
     || (position.x - dx <= collision.position.x + collision.size.x 
      && position.x + + size.x >= collision.position.x + collision.size.x); 
+0

게시 한 방법으로 메소드를 변경했지만 도움이되지 않았지만 충돌이 여전히 작동하지 않습니다. 상자는 엉망이되어 보이지만 말하기는 어렵습니다. 다른 아이디어? –

+0

각 좌표 방향의 두 가지 비교는 사각형 겹침을 검사하기에 충분합니다. 나는 그들이 겹치지 않는 조건에 대해 생각하는 것이 더 쉽다는 것을 안다. 하나의 왼쪽이 다른 하나의 오른쪽보다 크다. 이것은 두 가지 조건을 제공합니다. 그런 다음 논리적으로 식을 무효화하여 중복 확인을위한 두 가지 조건을 제공합니다. –