2009-08-06 5 views
2

보기 기반 응용 프로그램에서 픽셀 완전 충돌을 수행 할 수 있습니까? 나는 예제 코드를 찾고 있었지만 행운은 없었습니다 ... 또한 특정 색상의 충돌을 나타 내기 위해 컬러 비트 맵을 사용할 수 있습니까?픽셀 완벽한 충돌?

답변

2

하실 수 있습니다. 그래도 CGImage을 사용하면 가장 쉬운 것 같습니다.

2 진 부울 배열을 만들어 픽셀 값을 읽어 히트 그리드 (기본적으로 2x2 행렬)를 만든 다음 게임 개체 클래스에 저장할 수 있습니다.

어레이 논리 값에 화소 데이터를 읽고, 다음 루프를 사용하는의 CGImage (the code is here) 대한 화소 데이터에 직접 액세스 할 필요가있을 것이다 : 케이 분명히

BOOL pixelGrid[xPixels][yPixels]; 
for (int i = 0; i < xPixels; i++) { 
    for (int j = 0; j < yPixels; j++) { 
     pixelGrid[i][j] = pixelIsOpaque(i, j); 
    } 
} 

있어서 pixelIsOpaque() 위에서 ' 픽셀 값을 추출하기 위해 샘플 코드를 사용하면 무엇이든 바꿀 수 있습니다. 픽셀이 존재하는지 여부를 저장하고 있습니다 (기본적으로 픽셀이 불투명도> 0인지 확인).

일단이 그리드가 생성되면 (프로그램 시작시 한 번 생성하고 결과로 생성 된 2D 배열을 게임 객체 안에 저장) 충돌 감지 방법이 필요합니다. 내가 100 % 컴파일 가능한하지 않을 수 있습니다하지만 난 당신에게 아이디어를 제공 희망 있도록

BOOL detectCollision(BOOL *pixelGrid1, BOOL *pixelGrid2) { 
BOOL result = NO; 
    for (int i = 0; i < xPixels; i++) { 
     for (int j = 0; j < yPixels; j++) { 
      if (pixelGrid1[i][j].opacity != 0 && pixelGrid2[i][j].opacity != 0]) { 
       result = YES; break; 
      } 

    } 
} 
return result; 
} 

난 그냥 즉석에서이 코드를 썼다. 쉽게 수정할 수 있지만 불투명도와 비교하는 대신 원본 색상 데이터를 가져 오는 데 픽셀 색 값과 다시 비교하면 see here입니다.

+0

+1 우수 정보. 나는 픽셀 완벽한 충돌에 정말로 관심이 있었다. 나는 이번 주말에 이것이 효과가 있는지보기 위해 노력할 것이다. 나는 단지 성능에 대해 우려하고 있지만, 그것은 나중에 달라질 수있는 또 다른 문제입니다. – Tovi7

관련 문제