2015-01-03 2 views
0

늦게까지, 나는 2 차원 응용 프로그램을위한 모든 종류의 멋진 충돌 감지 알고리즘과 quadtree를 연구했으며, 그 충돌 알고리즘을 구현하기 시작한 시점에서 내 응용 프로그램을 가지고 있습니다. 내 gameloop은 내 프레임의 Δt를 계산할 수 있으며 페인트 된 프레임간에 '보간'충돌 검사를 수행하려고합니다 ('brute-force'방법과 대조적으로 가능한 한 빨리 페인트하여 성능과 애니메이션을 전반적으로 저하시킵니다.) 품질).페인트 이벤트 간의 충돌을 보간하는 방법

바닥 라이너

무엇 '보간'충돌 검사를 구현하는 가장 효율적인 방법이며, 또한,이 단순히 나를 위해 보간을 수행 할 ΔT와 속도에 걸릴 수있는 충돌 알고리즘?


추가 담고 및 정보

내가 쿼드 트리 내에서 AABB 후 이미지를 픽셀 교차로마다 사용하고 있습니다. 이미지는 본질적으로 직사각형으로 표현되며 정의 된 알파 투명도 임계 값에 맞는 이미지 픽셀 주변의 볼록/오각형 폴리곤을 계산 한 다음 minkowski 포털 미세 조정 또는 재귀 원과 같은 다른 알고리즘을 수행하는 것이 너무 효율적이라는 것을 알았습니다. 특히 이미지의 사각형 모양이 제한되어 있기 때문에 비효율적 인 속도에도 불구하고 픽셀 단위로 선택합니다 (이 사실을 알고 있기 때문에 AABB 충돌 검사로 수표를 줄이면 픽셀 단위 검사가 줄어 듭니다). 미래에는 이미지가 다른 각도로 회전하기 때문에 AABB와 다른 방법을 다시 최적화/사용하려고 할 수 있습니다.

게임 루프 코드 : update()는 캐치 업 작업을 처리합니다.

currentUpdateTime = System.nanoTime(); 

    while(true) { 
     beginLoopTime = System.nanoTime(); 

     drawPanel.repaint(); 

     lastUpdateTime = currentUpdateTime; 
     currentUpdateTime = System.nanoTime(); 
     update((int) ((currentUpdateTime - lastUpdateTime)/(Math.pow(10,-9))));//1000*1000 

     endLoopTime = System.nanoTime(); 
     deltaLoop = endLoopTime - beginLoopTime; 

     if(deltaLoop <= desiredDeltaLoop) { 
      try { 
      /*Refer to: 'http://stackoverflow.com/questions/1036754/difference-between-wait-and-sleep' 
      on differences between Thread.sleep() and wait()*/ 
       wait((long) ((desiredDeltaLoop - deltaLoop)/(Math.pow(10,-6)))); 
      } catch(InterruptedException e) { 
       e.printStackTrace(System.out); 
      } 
     } 
    } 

답변

1

나는 이것이 가장 좋은 대답은 아닐 수 있다고 말함으로써 시작하겠습니다. 그것은 "배트에서 벗어난"생각할 수있는 테크닉입니다. 실제로 알고있는 것이 아니라 실제로 사용됩니다. 즉,

시간이 지남에 따라 움직이는 창이있는 2D 충돌 검사는 공간이 3 차원 인 시간을 고려한 3D 공간으로 고려한 다음 3D 충돌 검사 기술을 적용하여 수행 할 수 있습니다. 같은 공간을 동시에 차지하는 패널은 교차하는 3D 모양으로 표시되며 교차 지점은 충돌이 발생한 시간을 알려줍니다.

+0

짧은 이야기이므로 초기 공간과 최종 공간 사이에 임의로 만든 영역이 겹쳐져 있는지 확인하십시오. 그것이 제가 생각한 것입니다. 그러나 더 나은 해결책이 있다는 것을 느꼈습니다. 나는 이것이 잘 작동한다고 생각합니다. –

+0

@KiroYakuza "초기 공간과 최종 공간 사이에 임의로 만들어진 영역이 겹치는 지 확인하십시오."- 아니요, 맞지 않습니다. 네가 이해하는지 모르겠다. 객체를 세 번째 차원 (시간)으로 확장하고 3D 확장이 다른 유사한 확장 객체의 객체와 겹쳐 지는지 확인해야합니다. 어느 한 시점에서 물체는 여전히 일정한 공간만을 차지합니다. – davmac

+0

(즉, 확장 영역이있는 2D 충돌 검사가 아닌 3D 충돌 검사 사용). – davmac

관련 문제