본문 바로가기

Win32 API42

Win32 API 기초 : Camera (3) 좌클릭을 하면 해당 위치로 카메라가부드럽게 이동하도록 하였습니다. 그러나 카메라의 이동이 완료되면미세하게 떨리는 현상이 발생했죠.  카메라가 프레임당 특정 거리를 이동하도록설정하고 기존 위치에서 특정 거리를 더해가며기존 위치와  목표 위치의 좌푯값의 차이가0 이하이면 도착한 것으로 보고 멈추는 방식으로진행하였죠. 근데 특정 거리를 더하다 보면목표 좌푯값을 넘어갈 수 있는 것이죠. 넘어가게 되면 카메라가 다시 반대로 이동하고,반대로 이동하다가 또 목표 좌푯값을 넘어가면다시 반대로 이동하게 되면서 떨리는 것처럼보이는 겁니다.  이를 해결하기 위해 카메라가 목표 위치로이동하는 방식을 수정해야 합니다. 먼저 카메라 클래스에  카메라가 클릭한 위치로 이동하는데얼마만큼의 시간이 걸리도록 할 것이냐를 나타내는멤버 m.. 2024. 10. 6.
Win32 API 기초 : Camera (2) 이제는 정말 입력을 받아서 카메라를 이동시켜 보겠습니다. 먼저 애니메이션 클래스의 render 함수를 보면 50번째 줄에 코드가 추가되었습니다. 기존에는 애니메이션이 실제 오브젝트가 생기는 위치에그대로 출력되었습니다. 그러나 이제는 카메라라는 개념이 생겼기 때문에 오브젝트가 존재하는 위치에 바로 애니메이션을렌더링하는 것이 아니라 카메라 위치까지 고려한위치에 렌더링이 되어야겠죠. 그래서 카메라 클래스에 존재하는GetRenderPos 함수가 카메라가 현재 중앙에서 얼마나 떨어졌는지 구한 뒤, 오브젝트가 그려질 위치를반환해줄 겁니다. 이를 통해 오브젝트를 렌더링하면 되죠.  Collider 클래스의 render 함수에서도 마찬가지로 진행해 줍니다.  이때 중요한 점은 충돌체가 존재하는 실제 위치인m_vFina.. 2024. 10. 5.
Win32 API 기초 : Camera (1) 게임 화면의 전체 해상도보다 실제게임 맵이 더 클 수 있습니다. 그러면 보통 게임에서는 캐릭터 움직임에 따라화면이 이동하면서 맵의 새로운 맵을 보여주죠. 이 역할을 해 줄 Camera를 구현하도록 하겠습니다.   CCamera라는 이름을 가진 클래스를 만듭니다.헤더 파일부터 살펴보면, 멤버로 m_vLookAt가 있습니다. 현재 카메라가 보는 곳의 좌푯값입니다.  멤버 m_pTargetObject는오브젝트를 가리키는 포인터로 만약 카메라가 특정 오브젝트를 따라다니도록설정하고 싶다면 해당 멤버를 통해 오브젝트의좌푯값을 얻어 활용하면 되겠죠.  m_vDiff는 초기 화면에서 카메라가 현재  얼마나이동한 상태인지, 그 값을 저장하는 멤버입니다. 여기서 초기 화면은, 게임 해상도의 중앙이었죠.카메라가 처음에는 게.. 2024. 10. 4.
Win32 API 기초 : Animation (4) CAnimation 클래스의 update 함수를 수정하겠습니다. m_iFrm의 값을 하나씩 증가하면서 모든애니메이션을 순회하며 재생하죠. 그러다가 m_iFrm의 값이 m_vAnimInfo의 사이즈보다 크거나같으면 m_iFrm값을 -1로 설정하고 모든 애니메이션이재생되었다는 의미로 m_bFinish를 true로 설정합니다. 그리고 update 함수의 동작을 더 진행할 필요가 없으므로m_accDT값을 0으로 설정하고 함수를 빠져나갑니다.  그게 아니고 아직 더 재생할 애니메이션이 남아 있다면 m_accDT에서, m_vAnimInfo에저장된 데이터 중 현재 재생될 애니메이션이 갖고 있는m_fDuration의 값을 뺍니다. 그리고 다시 그 값을 m_accDT에 대입합니다. 이것이 의미하는 것은 m_accDT에 .. 2024. 9. 1.
Win32 API 기초 : Animation (3) 이제 CAnimation 클래스에서 텍스처 정보를 갖고 있고 render 함수까지호출해 주고 있기 때문에 CPlayer 클래스에서텍스처 정보를 갖고 있을 필요가 없고,그렇기에 텍스처를 CPlayer 클래스에서그려줄 필요가 없습니다.  CAnimation 클래스에서는  render 함수를 통해 화면상에 텍스처를 그리고 있습니다. 일단 멤버 m_bFinish는 bool형으로 ,멤버 m_vAnimInfo에 저장되어 있는 프레임들이모두 재생되고 나면 true가 되어 모든 프레임이재생되었다는 것을 의미하게 되어 render 함수를빠져나옵니다. 우선은 m_vAnimInfo에 저장되어 있는프레임들을 한 번만 재생하게 할 겁니다. 그래서 m_bFinish가 true가 되면 render를진행하지 않고 빠져나가게 되죠. .. 2024. 9. 1.
Win32 API 기초 : Animation (2) 애니메이션을 저장하고 있는오브젝트의 Component인 Animator를 생성해 보겠습니다.  우선 대입을 통해 새로운 오브젝트를 생성한다고 할 때, 인자로 들어온 오브젝트에 애니메이터를 가리키는 멤버 m_pAnimator의 값이 존재한다면 이를 가져와야겠죠. 그래서 34번째 줄에 있는if 문에 들어가면 새로운 동적 할당을 통해 인자로 받은 오브젝트가 갖고 있는 m_pAnimator와 같은 값을 가진 공간을 만듭니다. 그리고 그 공간에 있는 Animator가 새로 생성한오브젝트를 가리키도록 하죠.     오브젝트가 component_render 함수를 통해 컴포넌트를 렌더링할 때, 이제는 m_pAnimator가 가리키는애니메이터 컴포넌트도 render를 해야겠죠.     CreateAnimator 함수를.. 2024. 8. 28.