WIN32API FrameWork/한단계씩 직접 구현

79. 측면 충돌 체크(프레임워크 완성)

2022. 6. 16. 16:17

http://hyrule.tistory.com/111 

 

*** 공부 방법 ***

1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처

hyrule.tistory.com

 


class CGameObject

- 물리 시뮬레이션 && 좌,우측 이동량이 감지되었을 때만 작동한다.

- 우측 이동/좌측 이동 두 상황으로 나눈다.

- 로직은 착지 알고리즘과 비슷하다.

1. 이전 위치와 현재 위치를 연결한 사각형을 만든다.(위 이미지 참고)

2. 지나온 지점에 있었던 타일들을 모조리 구한다.

3. 이동 불가 타일이 있었는지 순회를 돌며 확인을 한다.

-- 타일 주소를 받는다.

-- 해당 타일이 이동 불가 타일이나 측면 충돌 체크 타일이 아닐 경우 continue.

-- 캐릭터가 밟고 있는 타일에 대해서는 체크 x(continue)

--- 밟고 있는 타일에 대해서 체크하면 이런 턱에서 걸릴수도 있음

--- 타일의 Pos.y에서 0.001정도 더한 값에서,

구한 사각형의 RB.y에서 0.001 정도 뺀 값보다 큰 경우 continue 해 주면 됨.

---- 부동소수점의 오차 방지를 위해서 빼주는 것임

 

 

-- 이후 위치관계를 확인한다.

 

 

-- 위처럼 충돌이 확인되었을 경우,

-- 충돌한 게임오브젝트를 다시 겹치는 만큼 반댓쪽으로 밀어 준다.

-- 이동량도 그만큼 감소해야 하므로 이동량도 밀어 준만큼 뺴준다.

 

-- 여기서 충돌처리가 되었으면 다른 타일은 더이상 체크할필요가 없으므로 모든 반복문을 빠져나간다.(break)


class CPlayer

- 현재 플레이어의 좌/우 애니메이션 재생 판정은 '이동량'으로 확인하고 있다.

- 그런데, 측면 충돌 처리 과정에서 충돌이 일어났을 경우 다시 반대 방향으로 밀어내고 있다.

--> 그래서 이런 현상이 발생한다.

현재 우측으로만 계속 이동 중

 

	//왼쪽을 보고 있는데
	if (!m_isRightDir)
	{
		//움직임이 오른쪽으로 생겼다면
		if (m_MoveDist.x > 0)
		{
			m_isRightDir = true;
			SetPivot(0.f, 1.f);
		}		
	}
	else
	{
		//반대의 경우
		if (m_MoveDist.x < 0)
		{
			m_isRightDir = false;
			SetPivot(1.f, 1.f);
		}
	}

- 이 코드가 문제였다.

- 플레이어 애니메이션을 이동량에 따라서 변경하는 것이 아닌, 키 입력에 따라서 변경되도록 코드를 수정해 준다.

--> 키 입력시 호출되는 콜백 메소드로 이 코드를 옮겨 준다.

void CPlayer::MoveLeft()
{
	m_isRightDir = false;
	SetPivot(1.f, 1.f);
	SetDir(-1.f, 0.f);
	MoveDir(m_Dir);
}

void CPlayer::MoveRight()
{
	m_isRightDir = true;
	SetPivot(0.f, 1.f);
	SetDir(1.f, 0.f);
	MoveDir(m_Dir);
}

정상적으로 측면 충돌이 된다.

 

GameFrameworkStepbyStep_79_Complete.zip
11.06MB

저작자표시 (새창열림)

'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글

78. 바닥 충돌 체크  (0) 2022.06.16
77. 타일맵 에디터 8: Save & Load 3  (0) 2022.06.15
76. 타일맵 에디터 7: Save & Load 2 - 문제 해결  (0) 2022.06.15
75. 타일맵 에디터 6: 빈 타일, 배경화면 설정  (0) 2022.06.14
74. 타일맵 에디터 5: Save & Load  (0) 2022.06.14
'WIN32API FrameWork/한단계씩 직접 구현' 카테고리의 다른 글
  • 78. 바닥 충돌 체크
  • 77. 타일맵 에디터 8: Save & Load 3
  • 76. 타일맵 에디터 7: Save & Load 2 - 문제 해결
  • 75. 타일맵 에디터 6: 빈 타일, 배경화면 설정
hyrule
hyrule
hyrule
C++ 프로그래밍 공부
hyrule
전체
오늘
어제
  • 분류 전체보기 (205)
    • C++기초 (50)
    • WIN32API FrameWork (109)
      • 한단계씩 직접 구현 (82)
      • 원본 (15)
      • 코드별 설명 개별저장(검색용) (12)
    • 자습 (21)
    • C++ TIPS (11)
    • 연습 노트 (3)
    • ETC (6)
    • DX2D StarCraft 모작 (1)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • C++
  • Windows 11
  • Tistory
  • notion
  • hello
  • 스타크래프트

최근 댓글

최근 글

hELLO · Designed By 정상우.
hyrule
79. 측면 충돌 체크(프레임워크 완성)
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.