2013-03-02 6 views
2

현재 Android 용 Java 게임을 만들고 있습니다. 달 착륙선 유형의 게임. 나는 어떤 종류의 장애물을 구현하고 무작위로 화면에 배치 될 소행성에갔습니다.충돌 감지 android (소행성과!)

그러나 나는 이들에 대한 충돌 감지를 수행하는 방법을 이해하는 데 어려움을 겪고 있습니다. 나는 소행성에 대한 이미지를 사용할 것이므로 각 이미지에 대해 직사각형 경계 상자를 쉽게 사용할 수 있지만 소행성이 원형 (또는 적어도 내 것입니다!) 일 때 사각형의 구석 위로 움직일 때 충돌이 감지 될 수 있습니다 시각적으로는 소행성의 일부가 아닙니다.

나는 어떤 종류의 경계 원을 사용해야 할 것으로 추측하고 있지만 이미지를 어떻게 설정할 수 있는지 잘 모르겠다.

모든 소행성이 같은 크기라면 원형/다각형 경계 상자의 일부 점을 하드 코딩 한 다음 이미지의 위치로 변환 할 수 있습니다. 따라서 실제로 다각형은 소행성?

이렇게하는 가장 좋은 방법에 대한 제안 사항은 훌륭합니다. 또한 어떤 사람이 높은 수준의 충돌 감지 의사 코드를 올리면 이해할 수 있습니다.

+1

원형 모양에 문제가 있습니까? 'collision = distance (c1.center, c2.) '처럼 쉽게 할 수 있습니다.센터)

+0

착륙선이 직사각형이고 소행성이 원형입니다. 더 명확하지 않게해서 죄송합니다. – swiss196

답변

2

lander 직사각형이 축 정렬되어 있고 (그 모서리가 좌표 축과 평행하다면) 충돌을 쉽게 점검 할 수 있습니다 동그라미. 반경이 r이고 중심이 (cx, cy)이고 원점이 (x, y) 인 직사각형, 폭이 w, 높이가 h 인 경우; 그들은 다음 중 하나에 해당하는 경우 충돌 : 사각형의 모서리 중 어느 (cx, cy) 사이

  • (x < cx < x+w)(y-r < cy < y+h+r)
  • (y < cy < y+h)(x-r < cx < x+w+r)
  • 거리는 r보다 낮습니다.

내 의견에 말했듯이, 센터 간의 거리가 반지름의 합보다 작은 지 확인해야하기 때문에 원 사이의 충돌이 훨씬 쉽습니다.

축 정렬되지 않은 사각형의 경우 솔루션이 좀 더 복잡합니다. 주어진 rectante (A, B, C, D)의 네 꼭지점; 다음 중 하나가 사실이라면 충돌은 발생

  • (x < cx < x+w)(y < cy < y+h)
  • intersectCircle(A, B, cx, cy, r)
  • intersectCircle(B, C, cx, cy, r)
  • intersectCircle(C, D, cx, cy, r)
  • intersectCircle(D, A, cx, cy, r)

함수 intersectCircle의 의사 코드 ~이다. 이것은 :

intersectCircle(P1, P2, a, b, r): 
    x1, y1 = P1 
    x2, y1 = P2 
    p = abs((x1-x2)*(a-x1)+(y2-y1)*(b-y1)) 
    q = sqrt((x1-x2)^2 + (y1-y2)^2) 
    return r > p/q 

이 기능은 내가 찾은 가장 간단한 하나 지금까지 this Mathematics' answer의 공식을 기반으로합니다.

+0

착륙선 자체가 회전 할 수 있기 때문에 축이 항상 불행히도 평행하지는 않습니다. 이것을 수정할 수있는 방법이 있습니까? – swiss196

+1

@ swiss196 축이 아닌 정렬 된 사각형에 대한 대답이 업데이트되어 도움이되기를 바랍니다. –

+0

도움 주셔서 감사합니다! – swiss196