2017-03-01 2 views
1

나는 내 맵과 충돌 작업을 수행하지만 내 플레이어가 충돌 할 때 나는 플레이어의 움직임을 멈추고 나는 걷지 않는다. 한 방향에 대한 플레이어를 막을 방법을 모르는충돌 작업은 있지만 콜 싱온 방향을 어떻게 알 수 있는지 모른다.

플레이어와지도 아래의 내 코드 충돌 이동하지 않습니다 플레이어에 대한 코드가 GAME1 클래스에

public bool IsCollisionTile(Rectangle player) 
{ 
    foreach(Rectangle rect in this._collisionObject) 
    { 
     if (rect.Intersects(player)) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

if (mapLoader.IsCollisionTile(player.getDestinationRect())) 
{ 
     player.setCantWalk(true); 
} 

그 Player.cs

private bool _cantWalk; 

    public void Update() 
    { 
    this._destinationRectangle.X = (int)_position.X; 
    this._destinationRectangle.Y = (int)_position.Y; 
    this._destinationRectangle.Width = _texture.Width; 
    this._destinationRectangle.Height = _texture.Height; 
    if(Keyboard.GetState().IsKeyDown(Keys.Up)) 
      { 
       if (_cantWalk == false) 
       { 
        _position.Y--; 
       } 
      } 
      else if (Keyboard.GetState().IsKeyDown(Keys.Down)) 
      { 
       if (_cantWalk == false) 
       { 
        _position.Y++; 
       } 
      } 
      else if (Keyboard.GetState().IsKeyDown(Keys.Right)) 
      { 
       if (_cantWalk == false) 
       { 
        _position.X++; 
       } 
      } 
      else if (Keyboard.GetState().IsKeyDown(Keys.Left)) 
      { 
       if (_cantWalk == false) 
       { 
        _position.X--; 
       } 
      } 

     } 

     public void setCantWalk(bool walk) 
     { 
      _cantWalk = walk; 
     } 

이 간단한 방법 나에게

+0

플레이어를 X 축에서 이동 한 다음 충돌 검사를 수행 한 다음 Y 축을 검사하고 다시 확인하고 시도하는 중 하나를 되돌릴 수 있습니다 s) 검사가 ... 이상하게 보이지는 않지만 옵션입니다 –

+0

안녕하세요.하지만 초보자이고 어떻게 해야할지 모르겠습니다. –

답변

0

도움을 생각하는 클래스의 기능 업데이트 및 setCantWalk, 당신은 객체의 움직임의 기록을 유지해야합니다. 따라서 겹침을 검사 할 때 어떤 방향으로 어떤 움직임이 겹침을 유발했는지 알 수 있습니다. 그런 다음 해당 객체에 대해 cantWalkX 또는 cantWalkY 변수를 설정하십시오.

더 나은 해결책은 장애물을 결정하기 위해 충돌 표면을 점검하는 것입니다. 교차하는 객체를 반환하도록 교차 루틴을 변경하고 상대 위치에 따라 그 방향으로의 이동을 방지해야합니다. 예를 들어, 충돌하는 객체가 객체의 오른쪽에 있으면, cantWalkXPositive를 설정하십시오. 왼쪽에 다른 것이있는 경우 cantWalkXNegative를 true로 설정하십시오.

관련 문제