Win32 API44 Win32 API 기초 : Tool (1) 게임의 맵을 만드려면 Tile이 필요합니다. 이 Tile을 배치할 수 있는 Tool을 만들어 봅시다. 우선 Tile이 필요하겠죠? Tile 역할을 해 줄 CTile 클래스를 만듭니다. 멤버 m_pTexture는 Tile의 외형으로 위와 같은 이미지 파일을 가리키는 멤버입니다. 멤버 m_TextureIdx는 m_pTexture가 가리키는 이미지 파일을일정한 단위로 나누어서 인덱스로 접근하기 위한 멤버입니다. 위 그림처럼 말이죠. 위에서 보이는 텍스처로 사용할이미지 파일의 크기는 954 x 954입니다. 그래서 하나의 인덱스 안에 있는 Tile의 크기는954 / 4 = 238, 약 238 x 238 정도이죠. 이제 cpp 파일을 살펴봅시다. 생성자에서 Tile의 크기를 지정해 주고 있습니다. 위의 .. 2024. 11. 24. Win32 API 기초 : Unity Build 다양한 클래스를 만들면서 프로젝트의 규모를 키워가다 보면점점 컴파일 속도가 느려지는 것을 체감할 수 있습니다. 현재 진행 중인 프로젝트도 코드가 얼마 없지만확실히 처음보다는 느려진 게 느껴지죠. 컴파일 속도가 느려지는 이유는 '분할 구현' 때문이죠. 분할 구현을 위해 헤더를 통해 필요한 파일을 참조하고 있습니다.이 파일들은 서로가 엮어 있기 때문에 참조한 헤더 파일이또 다른 헤더 파일을 참조하는 형태이므로 하나씩 찾아가컴파일 하다 보니 느려지는 것입니다. 그래서 클래스를 만들 때마다 생긴, 이 많은 Cpp 파일을하나의 Cpp 파일로 모은 후, 이 하나의 Cpp 파일만 컴파일하여컴파일 속도를 올릴 수 있습니다. 그 기능을 해 주는 것이 바로 Unity Build 입니다. 프로젝트 우클릭 - 속성 -.. 2024. 11. 23. 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. 이전 1 2 3 4 ··· 8 다음