2017-09-10 6 views
1

간단한 게임을 만들고 충돌을 추가하여 플레이어가 창 밖으로 나가지 않게했습니다. 작동하고 일부 벽을 만들고 충돌을 만들려고했으나 작동하지 않았고/정말 버그가있었습니다. "플레이어"가 벽을 통과하는 것을 막는 방법은 무엇입니까?어떻게 "플레이어"와 "벽"의 충돌을 구현합니까?

이동 코드 :

  if(e.KeyCode == Keys.A) 
     { 
      left = true; 
     } 

     if (e.KeyCode == Keys.D) 
     { 
      right = true; 
     } 

     if (e.KeyCode == Keys.W) 
     { 
      up = true; 
     } 

     if (e.KeyCode == Keys.S) 
     { 
      down = true; 
     } 
    } 


    private void Form1_KeyUp(object sender, KeyEventArgs e) 
    { 
     #region Stop controls 
     if (e.KeyCode == Keys.A) 
     { 
      left = false; 
     } 

     if (e.KeyCode == Keys.D) 
     { 
      right = false; 
     } 

     if (e.KeyCode == Keys.W) 
     { 
      up = false; 
     } 

     if (e.KeyCode == Keys.S) 
     { 
      down = false; 
     } 
    } 

내 외벽 충돌 : 현재 당신이 외벽의 좌표 선수뿐만 아니라 경계를 결정하는 정수 값을 사용하는 것처럼 나는 그것을 읽을

  if (right == true) 
     { 
      if (player.Left >= level.Width - player.Width) 
      { 
       player.Left = level.Width - player.Width; 
      } 
      else 
      { 
       player.Left += speed; 
      } 
     } 

     if (left == true) 
     { 
      if (player.Left <= level.Left) 
      { 
       player.Left = level.Left; 
      } 
      else 
      { 
       player.Left -= speed; 
      } 
     } 

     if (up == true) 
     { 
      if(player.Top <= level.Top) 
      { 
       player.Top = level.Top; 
      } 
      else 
      { 
       player.Top -= speed; 
      } 
     } 

     if (down == true) 
     { 
      if (player.Top >= level.Bottom - player.Height) 
      { 
       player.Top = level.Bottom - player.Height; 
      } 
      else 
      { 
       player.Top += speed; 
      } 
     } 

답변

1

.

벽의 한 형태를 얻기 위해 할 수있는 일은 2D 배열을 사용하는 것입니다.

좌표 시스템을 모방하기 위해 배열 내의 배열입니다.

그런 다음 각 배열 좌표에 "CellInformation"개체를 저장할 수 있습니다.

CellInformation 객체는 걸을 수 있는지 여부를 알 수 있습니다. 예를 들어 플레이어가 좌표 (4,4)에 있고 왼쪽으로 이동하려고하면 (3,4) 플레이어는 배열 4를 선택합니다. 배열 3, 거기에서 물체를 가져 와서 걸어 갈 수 있는지 물어보십시오. 그렇다면 플레이어가 새 좌표를 (3,4)로 설정합니다.

또한 예를 들어 나무 재료, 물, 용암, 흙, 숲 지역, 적의 존재 여부 등 다양한 정보를 각 셀에 추가 할 수 있습니다. 2 차원 배열에

더 많은 정보 : 답변 https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/arrays/multidimensional-arrays

+0

감사합니다, 당신은 그리드 오른쪽 어떤 종류의 의미? 그러나 "플레이어"는 제한과 같은 "격자"없이 자유롭게 움직일 수 있습니까? –

+0

그리고 내 플레이어는 너비가 1 픽셀이고 높이가 1 픽셀입니다. 아니? –

+0

예, 그리드로 작동합니다. 순전히 C# 또는 게임 엔진 내부에서이 작업을 수행하고 있습니까? 순수하게 C#으로 만들고 변수로 플레이어 위치 만 설정하면 설정 한 것 이외의 제한이 없습니다. 그리드의 바깥 쪽 부분을 바깥 쪽 경계 벽으로 정의 할 수 있습니다. 이것은 각 셀에 대해 정의한 설정과 함께 플레이어가 걸을 수있는 위치와 그와 같이 이동 제한을 결정합니다. – Doh09

관련 문제