hyrule 2022. 6. 3. 00:24

http://hyrule.tistory.com/111 

 

*** 공부 방법 ***

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

hyrule.tistory.com

 


[ 사전 지식 ]

POINT PTMouse;

GetCursorPos(&PTMouse);

ScreenToClient(hWnd, &PTMouse);

- POINT: 구조체. (long)x, (long)y 를 들고 있는 단순한 구조체이다. 마우스의 좌표는 이 구조체에 받는다.

- GetCursorPos(&PTMouse): 마우스의 '스크린 좌표계' 를 받아온다. 모니터의 맨 왼쪽 위 부분을 0,0으로 하는 좌표값이다.

- ScreenToClient(hWnd, &PTMouse): 받아온 '스크린 좌표계'를 윈도우 창 클라이언트 영역의 좌상단을 0,0으로 변환해준다.


class CInput

 < Vector2 m_MousePos >

- 윈도우 창에서의 위치

< Vector2 m_MouseWorldPos >

- 게임 공간에서의 마우스 위치

<Vector2 m_MouseMove >

- 마우스의 이동량

 

< Init() -> Init(HWND hWnd) >

< m_hWnd >

- CInput의 Init 함수에서 윈도우 핸들을 미리 받아놓는다. ( < ScreenToClient() > 함수 사용을 위해서 )

 

< MouseUpdate() >

- 지난번에 선언만 해놓고 냅뒀던 메소드

- 여기서 마우스 포인터의 좌표를 구해준다.

- 새로 마우스의 좌표값을 받아오면, 이 좌표값을 m_MousePos에 갱신하기 전에 이동량을 먼저 구해준다.(갱신 전의 m_MousePos에는 이전 마우스의 좌표값이 들어있을 것이므로)

 

< ComputeWorldPos(const Vector2& CamPos) > 

- 마우스 포인터의 좌표를 다 구했다면, 클라이언트 영역 기준 좌표를 얻어왔을 것이다.

- 이 값에 카메라의 위치값만큼을 더해 주면, 게임 월드 상에서의 좌표가 될 것이다.

-- 카메라의 좌표를 사용하므로, 반드시 카메라의 좌표가 업데이트 된 이후에 업데이트 되어야 한 프레임 늦게 업데이트 되는 일이 없어질것이다.

--- 그러므로 호출할 메소드를 하나 만들어서 카메라의 업데이트 과정이 끝나고 나서 호출할 수 있게 해 준다.

- 카메라의 좌표값을 받아와서, 마우스 커서의 위치에 더해서 m_MouseWorldPos에 저장한다.

 

 


 

class CCamera

- 업데이트 순서도 게임 진행에 많은 영향을 미치므로, 정리해 줄 필요가 있다.

- 카메라의 업데이트 순서도 약간 바꿔줄 필요가 있다.

 

- 우선, 카메라의 상태 업데이트 호출은 현재 CScene::PostUpdate()의 가장 마지막 부분에서 진행되고 있다.

-- 이를 CScene::Update()의 마지막 부분으로 좀 떙겨 오자.

 

- 또한, 카메라의 Update() 마지막 부분에서 CInput::ComputeWorldPos()를 호출하여 마우스의 월드 위치를 업데이트할 수 있도록 해 주자.


GameFrameworkStepbyStep_53_Mouse_1.zip
0.31MB