2011-12-27 3 views
0

나는 내 작은 하향식 게임에서 작동하도록 충돌을 시도하고 있습니다. 플레이어를 쫓고있는 엔티티가 많습니다. 내가 충돌하지 않는다면, 분명히 모두 똑같은 번들로 묶일 것입니다. 나는 충돌이 있었는지 확인하는 방법을 알고 있지만 어떻게 반응하는지는 알 수 없습니다. 몇 시간 동안 그걸로 어지럽히는 것에서 다소 효과가 있지만,별로 좋지는 않습니다.플레이어를 쫓는 엔티티 간의 충돌 감지

if (check_collision(enemies[e1]->xPos, enemies[e1]->yPos, SIZE_ENEMY, SIZE_ENEMY, enemies[e2]->xPos, enemies[e2]->yPos, SIZE_ENEMY, SIZE_ENEMY) == true) 
{ 
     //the distance that is intersecting 
    float dx, dy; 

    if (enemies[e1]->xPos > enemies[e2]->xPos) 
     dx = enemies[e2]->xPos + SIZE_ENEMY - enemies[e1]->xPos; 

    if (enemies[e2]->xPos > enemies[e1]->xPos) 
     dx = enemies[e1]->xPos + SIZE_ENEMY - enemies[e2]->xPos; 

    if (enemies[e1]->yPos > enemies[e2]->yPos) 
     dy = enemies[e2]->yPos + SIZE_ENEMY - enemies[e1]->yPos; 

    if (enemies[e2]->yPos > enemies[e1]->yPos) 
     dy = enemies[e1]->yPos + SIZE_ENEMY - enemies[e2]->yPos; 

    if (dx < dy) 
    { 
     enemies[e1]->xPos += (dx/2); 
     enemies[e2]->xPos -= (dx/2); 
    } 

    if (dy < dx) 
    { 
     enemies[e1]->yPos += (dy/2); 
     enemies[e2]->yPos -= (dy/2); 
    } 

} 

잘못된 방식으로 완전히 완료했거나 몇 가지 사항을 놓친 것일 수 있으므로 도움이 필요합니다.

+0

을에

희망, 내가 만든하지 않은 실수 당신이해야 할 수도 있습니다 더 운 http://gamedev.stackexchange.com/ –

답변

0

엔티티의 다음 위치를 계산할 때 다른 엔티티와의 충돌이 있는지 확인하십시오. 그렇다면이 엔티티를 전혀 이동하지 마십시오.

또 다른 접근법은 한 엔티티에서 다른 엔티티로 거리와 벡터를 계산하는 것입니다. 거리는 피타고라스의 정리에 의해 계산됩니다 : d = (x1-x2)^2 + (y1-y2)^2. * DD

newx2 = X2 + (X2-X1) : d < 2*SIZE_ENEMY 경우, 그들은 중복되어 적어도 DD = 2*SIZE_ENEMY - d 멀리 벡터 (X2-X1, Y2-Y1)에 의해 그 중 하나를 이동해야/(2 * SIZE_ENEMY)

newy2 = Y2 + (Y2-Y1) * 일/(2 * SIZE_ENEMY) 공식 :

+0

에서 게시 또한 벡터 수학을 살펴보십시오. http://en.wikipedia.org/wiki/Euclidean_vector. 비교적 간단하지만 2D 게임에서 크게 도움이 될 것입니다. – werewindle