프로젝트의 경우 게임을 만들 게임 엔진을 제공 받았습니다. 우리는 경계 상자 감지 방법을 통해 가능한 충돌이 발견 된 후에 픽셀 레벨 충돌 감지를 구현해야합니다. 둘 다 구현했지만 픽셀 수준 테스트는 작은 개체 (이 경우 글 머리 기호)에서 실패합니다. 나는 그것이 느린 총알을 위해 작동하는지 점검했지만 너무 실패했다.작은 개체의 경우 픽셀 수준 충돌 검색이 실패합니다. (Java)
내 픽셀 수준 구현에서는 사용 가능한 IntBuffer를 사용하여 각 텍스처의 비트 마스크를 만듭니다 (ByteBuffer도 사용할 수 있습니까?). IntBuffer는 RGBA 형식이고 크기는 width * height입니다.이 값을 2D 배열에 배치하고 1이 아닌 숫자를 모두 마스크로 바꾸십시오. 경계 상자가 충돌 한 후 중복 (.createIntersection을 사용하여)으로 표시된 사각형을 찾은 다음이 교차 내의 두 스프라이트의지도에서 비트 AND를 사용하여 둘 다의 0이 아닌 픽셀을 확인합니다. 나는 일이 고민 봤는데 어떤 도움이 크게 감사합니다
/**
* Pixel level test
*
* @param rect the rectangle representing the intersection of the bounding
* boxes
* @param index1 the index at which the first objects texture is stored
* @param index the index at which the second objects texture is stored
*/
public static boolean isBitCollision(Rectangle2D rect, int index1, int index2)
{
int height = (int) rect.getHeight();
int width = (int) rect.getWidth();
long mask1 = 0;
long mask2 = 0;
for (int i = 0; i < width; i++)
{
for (int j = 0; j < height; j++)
{
mask1 = mask1 + bitmaskArr[index1].bitmask[i][j];//add up the current column of "pixels"
mask2 = mask2 + bitmaskArr[index2].bitmask[i][j];
if (((mask1) & (mask2)) != 0)//bitwise and, if both are nonzero there is a collsion
{
return true;
}
mask1 = 0;
mask2 = 0;
}
}
return false;
}
:
여기에 픽셀 레벨 테스트에 대한 내 코드입니다.
: /// C :/문서 % 20 ° % 20Settings/SER/데스크탑/java3d/신발 끈 % 20formula % 20 % 20Wikipedia % 20the % 20free % 20encyclopedia.htm' 당신이 찾을 수있는 지역 하나의 도형 중 ... 하나의 영역이 서로 다른 모양의 영역의 합보다 작 으면 충돌합니다. 이것은 O (n + m) 방법보다 O (n * n) –
조언 주셔서 감사하지만 나는 이런 종류의 테스트를 구현해야합니다. – Mafro34