목록공부/2D강의 (58)
응애맘마조
동기와 비동기가 있는데 동기는 순차적으로 처리하고 비동기는 비순차적이고 동시에 실행이 됩니다. 프로세스는 과정이나 처리라는 뜻을 갖고 있습니다. 컴퓨터에서의 프로세스는 실행이나 처리하고 있는 프로그램을 의미합니다. 더 나아가서 멀티프로세스는 연속적으로 처리를 하고 있는 프로세스를 의미합니다. 프로세스 내에서 실행되는 단위를 스레드라고 하고 비동기적으로 일어나야 되는 로딩씬은 멀티스레드라고 합니다. 멀티스레드에서는 공유되고 있는 메모리가 문제가 됩니다. map과 unmap을 해서 GPU와 CPU의 접근을 제한하는 것처럼 동시에 읽고 쓰기가 되지 않도록 Lock과 Unlock를 사용해야 됩니다. 안에 lock, unlock이 있습니다. 그리고 스레드를 사용해서 함수의 주소를 쓸 수 있습니다. 위처럼 공유되고..
오늘은 아이소타일(Isotile)에 대해서 배웠습니다. 아이소타일은 정육각형 모양으로 생겼으며 위에서 45˚ 각도로 보는 쿼터뷰입니다. 2.5D로 볼 수 있고 마름모 모양의 빈 공간을 알파값으로 둡니다. 그래서 DirectX의 2D의 끝은 아이소타일이라고 볼 수 있습니다. 정육각형이므로 정점 간의 각도는 120˚입니다. 타일 한쪽 면의 각도를 삼각함수로 구할 수 있는데 그때의 각도는 30˚입니다. 아이소타일도 타일맵의 일종이기 때문에 타일맵을 상속받도록 했습니다. 원점 (0, 0)을 시작점으로 했고 최상단의 중간입니다. (1, 0)부터 오른쪽 아래로 내려가도록 했습니다. 위 사진은 강사님이 설명하면서 그렸던 그림입니다. 내일은 로딩씬을 배운다고 했습니다. 읽어주셔서 감사합니다.
오늘은 장면 Scene 전환에 대해서 배웠습니다. 스테이지나 맵 전환에서 주로 사용합니다. 들고 있는 객체는 맵마다 다 다릅니다. 마을에서의 객체, 상점에서의 객체, 보스방에서의 객체 등등 전부 제각각의 객체를 가지고 있습니다. 하지만 항상 런타임 중에 동적할당으로 생성했었는데 그렇게 되면 메모리누수가 되기 때문에 컴퓨터에 안 좋은 영향을 주게 됩니다. 그래서 배열이나 오브젝트 풀링을 사용합니다. 맵 전환이나 일정 부분을 넘어갔을 때 로딩중의 장면이 나오면서 잠깐잠깐 느려지는 경우가 있습니다. 그때 볼 수 있는 장면이 로딩씬입니다. 로딩씬은 미리 생성했던 객체를 가져오기 때문에 느려질 수밖에 없습니다. 그렇다고 SafeDelete를 사용하게 되면 메모리 해제를 하게 되어 전환 시에 가리키고 있는 주소가 ..
어제 말했던대로 폰트와 조명에 대해서 배웠습니다. 먼저 폰트입니다. 폰트로 DirectX에 컴포넌트로 DirectWrite로 있습니다. 그림판에 텍스트로 선택하면 사각형 박스가 나오는 것 처럼 DirectX의 폰트도 똑같습니다. 지금 2D를 배우지만 시스템은 3D로 배우고 있습니다. 하지만 폰트는 2D로 포함되기 때문에 D2D와 함께 사용해야합니다. 폰트토 배열처럼 vector를 사용합니다. textDesc.font = font; textDesc.fontSize = size; textDesc.stretch = stretch; textDesc.style = style; textDesc.weight = weight; 폰트의 매개변수입니다. 다음 조명입니다. 조명도 하나만 관리하기 때문에 싱글톤입니다. str..
오늘부터 게임의 기능을 작은 것부터 조금씩 알아봤습니다. 먼저 UI입니다. UI는 마우스와 충돌했을 때나 눌렀을 때의 역할을 합니다. 고정된 창에서만 프로그램이 동작한다면 상관이 없지만 카메라의 영향도 받는다면 위치가 달라지게 됩니다. 그래서 창에서 x, y 좌표의 값을 빼야 카메라가 움직여도 제대로 된 위치에서 동작하게 됩니다. Texture입니다. 이미지와 관계가 있으며 싱글톤입니다. 픽셀 수도 Texture이며 자원을 불러오는 클래스입니다. SRT만 다를 뿐이고 자원을 제각각 사용하게 되면 효율이 좋지 않기 때문입니다. 그래서 배열로 쓰게 된다면 선형 구조이기 때문에 처음부터 끝까지 탐색을 하게 되기 때문에 트리나 해시로 탐색이 용이한 구조로 되어있는 STL의 map을 사용하는 것이 좋습니다. ma..