• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

26분 14초 부분에 ApplyLeave(gameObject)는 가능여부 체크후 실행하는 것이 좋을 것같습니다!

21.06.07 21:25 작성 조회수 127

1

안녕하세요, 선생님.

애청하는 학생 중하나입니다.

다시한번 정주행중인데.. 수정하였으면 하는 부분이 하나 생겨 문의를 드려봅니다. 아래 부분에서

ApplyLeave(gameObject); 목적지에 갈수 있는지 체크한 이후에 넣는게 맞지 않나 생각이듭니다!

- 몬스터가 플레이어를 쫓다가 막혔을때 (물론 막히면 다른데로 갈수도있으나 그러지 않은 상황이 지금단계에서는 생기더라구요. )

ApplyLeave는 계속 하고 있으나, return이 되어 게임상 _object list에는 저장이 되지 않고 있는 상황이 생겨서용..

별거 아니지만.. 테스트중 오류가 발견되어 코멘트 남겨봅니다! 늘 감사하게 강의 듣고있습니다. 감사합니다.

=> AS-IS

public bool ApplyMove(GameObject gameObject, Vector2Int dest)

            {

                ApplyLeave(gameObject);



                // 예외를 처리한다.

                if (gameObject.Room == null)

                    return false;

                if (gameObject.Room.Map != this)

                    return false;

               // 목적지에 갈 수 있는지 체크
                if (CanGo(dest, true) == false)
                    return false;
      PositionInfo posInfo = gameObject.Info.PosInfo;

                // 목적지에 나를 텔레포트 시킴
                {
                    int x = dest.x - MinX;
                    int y = MaxY - dest.y;
                    _objects[y, x] = gameObject;
                }

=> TO-BE

 public bool ApplyMove(GameObject gameObject, Vector2Int dest)
            {

                // 예외를 처리한다.
                if (gameObject.Room == null)
                    return false;
                if (gameObject.Room.Map != this)
                    return false;

                // 목적지에 갈 수 있는지 체크
                if (CanGo(dest, true) == false)
                    return false;

                // (순서조정) 나의 위치 체크와, 공간에서 사라지게 하고 하는게 다 ApplyLeave에 들어가있다.
                ApplyLeave(gameObject);
                
                PositionInfo posInfo = gameObject.Info.PosInfo;

                // 목적지에 나를 텔레포트 시킴
                {
                    int x = dest.x - MinX;
                    int y = MaxY - dest.y;
                    _objects[y, x] = gameObject;
                }

                // 실제 좌표 이동 | 사실 왜 바꿔주는지는 아직 모르겠음 return도 안하는데
                posInfo.PosX = dest.x;
                posInfo.PosY = dest.y;

                return true;
            }

답변 1

답변을 작성해보세요.

1

좋은 판단을 하신 것 같네요.
컨텐츠 코드는 과감하게 막 수정하셔도 무방합니다.