2011-09-26 9 views
1

기본적으로 나는 8 개의 다른 각도 (45도, 90도 등)에서 떠 다니는 사각형들을 가지고 있습니다. 나는 그들 사이에 충돌 탐지가 진행되고 있지만 한가지는 여전히 제대로 작동하지 않습니다. 나는 생각하지 못하거나 무엇을하고 있는지 모르지만 결과적으로 올바른 각도를 얻을 수는없는 것 같습니다. 나는 여러 장소를 검색해 보았지만, 내가 찾은 곳에서 실제로 아무것도 얻지 못했습니다.사각형 사이의 충돌 감지 - 결과 각도

참고 : 각도 시스템은 위쪽에서 0에서 시작하여 시계 방향으로 증가합니다.
참고 : 모든 사각형은

하나 개의 사각형이 바로 오른쪽 (90도)가는 다른 것 바로 왼쪽 (270도)에 도달 말 같은 질량을 가지고있다. 그들은 서로 잘 맞을거야.

이제 왼쪽으로가는 사람이 한 명 올라간다 고합니다. 여기에서는 단순히 각도 나 다른 것을 뒤집을 수 없습니다.

두 가지 이상의 방법이있는 경우 다음을 고려하십시오. 다른 코드로 확산되도록 CD를 재정렬하지 않으면 모든 사각형의 위치가 있습니다. CD는 어디로 가고 있는지 비교하지 않고 두 개가 겹쳐져 있는지 확인하여 검사합니다.

지금까지 충돌 감지를 제외하고는 거의 모든 작업을 해왔으므로 작업을 마치고 다른 작은 것들을 추가하기 만했습니다.

하드 코딩을하지 않고 앵글을 바로 잡을 수있는 방법을 알고 있다면 좋습니다. 이 시점에서 나는 그것을 가지고 하드 코딩 할 준비가되었다. (너무 많지는 않다.) 내가 가지고있는 모든 사각형이 다른 사각형을 쳤다면 (예 2), 또는 둘 다 (예 1) 수행 할 때이다. 어느 것이 든 정말 도움이됩니다.

+0

결과 각도는 그들이 움직이는 방법뿐만 아니라 접촉점에 달려 있습니다. 접촉 지점에 대해 약간의 가정을하고 있습니까? –

+0

나는 그것이 당신이 의미하는 것이면 그것은 측면이나 위쪽/아래쪽에 부딪쳤다는 것을 알아 냈습니다. 솔직히 말하면, 지금 생각해 보면, 사각형 사이의 CD는 필요하다면 실제로 갈 수 있습니다. 차이점을 너무 많이 만들지는 않을 것입니다. 나는 어떤 일을 좋아합니다.> – chris

+0

8 가지 각도로 무엇을 의미합니까? 직사각형이 축을 중심으로 또는 직선으로 회전하고 있습니까? 각도보다는 방향을 의미합니까? – SD1990

답변

1

나는 다른 객체의 배열을 말한다

각 사각형

이 기능에 대한 테스트를하고있다 ...이 같은 의미라고 생각한다.

Obstacle* obstacle = new Obstacle; 
Obstacle** obstacles = obstacle*[]; 

For(int i = 0; i <3; i++) 
{ 
obstacles[0] = New Obstacle(x,y, etc...); 
etc... 
} 

또는 비슷한 ...이 다시 약간 녹슨 메신저하지만 당신이 그것을 따른다면 당신은 뭘 메신저 relaise 할 수 있어야한다 약간 녹슨

void collision(obstacles) 
    { 
     for(int i = 0; i < obstacles.sizeOf();i++) 
      { 
      //bottom y 
      if((this.ypos + this.height) > (obstacles[i].ypos - obstacles[i].height)) 
       obstacles[i].doYCollision(this); 


      //top y 
      if((this.ypos - this.height) < (obstacles[i].ypos + obstacles[i].height)) 
       obstacles[i].doYCollision(this); 


      //right x 
      if((this.xpos + this.width) > (obstacles[i].xpos - obstacles[i].width)) 
       obstacles[i].doXCollision(this); 

      //left x 
      if((this.xpos - this.width) < (obstacles[i].xpos + obstacles[i].width)) 
       obstacles[i].doXCollision(this); 
      } 
    } 

입니다.

결과 함수 호출 만 있으면됩니다.

void doYCollision(Obstacle obstacle) 
{ 
    // Whatever y direction they are going do the opposite 
    obstacle.yDir = obstacle.yDir * -1; 
} 
void doXCollision(Obstacle obstacle) 
{ 
    // Whatever x direction they are going do the opposite 
    obstacle.xDir = obstacle.xDir * -1; 
} 

여기서, yDir, xDir은 현재 오브젝트의 x 및 y 속도입니다.

나는 이것이 매우 녹슬고, 당신에게서 약간의 코드가 없다는 것을 지적해야한다. 이것은 최고의 ive이다. 어느 쪽이든이 방법은 충돌 탐지로 시작해야합니다. shoudl 위의 코드는 모든 장애물/물체/핑크 플라밍고/모든 것이 충돌하는 모든 충돌을 허용합니다. Im는 또한 itll가 동시에 여러 충돌에 관해서 당신이 원하는 것을 할 것을 기대하고 있습니다.

속도가 벡터 덩어리이므로 속도와 방향이 모두 동일하므로 x와 y를 서로 다른 두 가지 방법으로 처리하여 방향을 얻을 수 있으므로 정확한 각도에 대해 너무 많이 걱정할 필요는 없습니다 (다른 것을 필요로하지 않는 한). 집단. 당신은 또한 =>http://www.topcoder.com/tc?d1=tutorials&d2=geometry1&module=Static, 내적 방법 방법을 사용하여 이것을 할 수 있지만, 만약 그들이 단지 사각형이어야합니다 괜찮을 것입니다.

희망이 도움이