2012-03-25 3 views
2

그래, 타일 기반의 작은 파고 게임을 만들고 있는데, 이제 충돌을 원해. 이 작업을 올바르게 수행하는 방법은 무엇입니까? 플레이어가 타일과 충돌하는지 확인하는 방법을 알고 있지만 실제로 플레이어가 벽에 부딪 힐 때 실제로 플레이어를 멈추게하는 방법을 모르겠습니다. 타일 엔진 충돌

enter image description here

나는 여기에 20 × 20 타일을 가지고 게임이다.

  foreach (Tile tiles in allTiles) 
     { 
      if (ply.rect.Intersects(tiles.rect)) 
      { 
       if (tiles.ID != -1 && tiles.ID != 1) 
       { 
        if (ply.X > tiles.X) 
        { 
         Console.WriteLine("Right part."); 
         ply.X = tiles.pos.X + 30; 
        } 

        if (ply.X <= tiles.X) 
        { 
         Console.WriteLine("Left part."); 
         ply.X = tiles.pos.X - 30; 
        } 

        if (ply.Y > tiles.Y) 
        { 
         Console.WriteLine("Bottom part."); 
         ply.Y = tiles.pos.Y + 30; 
        } 

        if (ply.Y <= tiles.Y) 
        { 
         Console.WriteLine("Upper part."); 
         ply.Y = tiles.pos.Y - 30; 
        } 
       } 
      } 
     } 
+0

['Terraria'] (http://terraria.org/)를 만드시겠습니까? – Marty

+0

@ Marty Wallace : 글쎄, 나는 복제품을 만들고있다. – Stan

+0

아, 굉장 해요^_^ – Marty

답변

1

사용하는 충돌 감지 어떤 종류 :

나는 기압 코드를 사용하고 있습니까?

'Rectangularles'와 '.intersects'메서드를 사용하는 경우에는 항상 bool을 선언하여 캐릭터가 바닥에 닿아 있는지 확인할 수 있습니다. 그가 아닌 경우 중력 벡터를 적용하여 다른 직사각형이있는 다음 타일로 떨어지도록합니다. 그러면 타격을 멈추게됩니다.

가로로 그를 막으려 고한다면 사각형의 어느면을 만져보고 'X'축에서 움직이지 못하게할지 테스트하십시오. 예 : 오른쪽으로 가고 직사각형의 왼쪽 부분과 교차하는 경우 블록이 'GoingRight'이동입니다.

if(myCharacterRectangle.Intersects(tileRectangle) 
    { 

     if(myCharacterPosition.X > (tilePosition.X) 
     { 
     //You know the character hits the Right part of the tile. 
     } 

     if(mycharacterPosition.X <= tilePosition.X) 
     { 
     //You know the character hits the Left Part of the tile. 
     } 

    } 

위로 가기 또는 아래쪽을 테스트하려는 경우 Position.Y도 마찬가지입니다.

행렬을 사용하여 픽셀 별 픽셀 충돌 검색을 사용하려는 경우 좋은 튜토리얼 here을 알고 있습니다. 충돌이 없으면 감지는 'Vector2 (-1, -1)'을 반환합니다. 하나가 있으면 충돌의 좌표가 반환되어 캐릭터가 터치하는 타일 부분을 더 쉽게 결정할 수 있습니다.

희망이 도움이됩니다. 게임에 행운을 비네.

+0

나는 당신과 비슷한 질문을 보았습니다. 아마도 이것이 당신이 필요로하는 것입니다 http://www.dreamincode.net/forums/topic/167529-xna-tile-collision-detection/ – phadaphunk

+0

도움을 주셔서 감사합니다. 곧이 작업을 시도해 보겠습니다. – Stan

+0

나는 타일의 왼쪽과 오른쪽 타격을 시도했지만 작동하지 않습니다, 그것은 내가 어디에 있었는지 왼쪽 측면을 치고 있다고 계속해서 말했습니다. 충돌은 한 번에 너무 많은 블록을 공격하기 때문에 성가신 일입니다. – Stan

관련 문제