Windows Programming
-
win32 게임 만들기(9) -ResourceWindows Programming/win32 게임엔진만들기 2022. 5. 14. 14:19
실제적 리소스를 활용해요 이미지를 로딩하여 사용을 해보자 리소스의 종류는 텍스쳐,사운드 등등 리소스를 관리할 부모 클래스 CRes 클래스 생성 리소스를 관리 하기 위해 키값과, 리소스가 위치 하고 있는 상대경로를 알고 있어야한다. 멤버 변수로 설정 해주고 기본 get set 함수 선언 CTexture 클래스 (이미지) Load() : 어떤 파일을 로딩해야 할지 호출 우리 프로젝트 폴더는 언제든지 위치가 변경 될수 있다. 프로그램 실행 될때마다 실행 파일의 위치가 바뀌면 경로가 다 틀어짐 게임이 시작될떄 필요한 이미지를 폴더안에 같이 넣어놀건데 문제가 없으려면 경로를 관리해야할 필요가 있다. PathMgr 1. 현재 파일 디렉토리에 Output 이라는 디렉토리를 생성하고 Debug Relase모드로 빌드시..
-
win32 게임 만들기(8) -ObjectWindows Programming/win32 게임엔진만들기 2022. 5. 1. 14:54
현 코드 상황) Object에 Update() 코드는 키 입력에 따라 포지션을 이동 시키고 있고 후에 render()쪽에서는 이동된 포지션을 다시 그려 준다. 사실 Object라는 클래스는 앞으로 파생될 모든 다양한 종류의 오브젝트 클래스들에 부모격인 클래스이다. 나중에 이 업데이트를 그대로 사용 하면 죄다 다른 오브젝트도 키누르면 업데이트 똑같이 움직일 것이다. ex) 플레이어를 조작하려는데 다른 물체들도 움직일 것 (테스트 코드로 배치해 놓은것이지 논리적 으로 맞지 않는다) 이부분을 수정 해보자!! 내가 원하는 건, 오브젝트를 상속 받은 다른 오브젝트들도 Scene의 Update 시점에 모든 오브젝트들이 업데이트를 호출 할 것인데 오브젝트마다 각기 다른 업데이트를 호출 할 것이다. 우리 오브젝트는 부..
-
win32 게임 만들기(7-2) -Scene ManagerWindows Programming/win32 게임엔진만들기 2022. 4. 25. 16:23
update는 이제부터 CsceneMgr update()로 교체 render도 화면 클리어후 CSceneMgr에 씬레더링으로 교체 씬을 업데이트하고 씬을 다시 렌더하고 m_memDC로 메인윈도우에 붙여넣기 하면 우리가 보게된다. CSceneMgr에 update와 render는 현재 씬의 상태를 업데이트하고 렌더를 하여야 한다. (현재는 START씬 하나 뿐이지만,) 앞으로 생격날 각각의 모든 씬들은 해당 씬이 시작될때 초기작업을 해주어야 하는데, 그 초기작업들은 각 씬마다 다를 것이다. 또, 씬과 씬의 전환이 발생 할때 벗어나는 씬 입장에서는 씬을 빠져나갈때 해주어어야 할 일들을 각 씬마다 다르게 구현을 해주어야 한다. (부모 포인터 타입으로 함수를 호출시키면 각 파생된 자식 클래스 별로 자기의 함수가 ..
-
win32 게임 만들기(7-1) -Scene ManagerWindows Programming/win32 게임엔진만들기 2022. 4. 23. 17:39
화면에는 무수히 많은 오브젝트 들이 존재하고, 그 오브젝트들은 다양하다. ex) 총알, 체력바, 캐릭터 등.... 우리는 이러한 무수히 많은 오브젝트들을 일괄적으로 관리 해주는 씬이 필요하다. 1) 오브젝트를 그룹별로 분류 씬의 존재하는 오브젝트들을 분리 하는 작업 define.h에 이넘 타입으로 선언 CScene클래스 CObject를 전방선언 : 최대한 컴파일 속도의 영향을 주지 않기 위해 (만약 직접 헤더를 참조 했다면 오브젝트 코드가 변경되면 씬 코드도 매번 확인을 해야 함) vector에 object*를 넣은 이유 : object클래스가 앞으로 만들어질 모든 오브젝트 클래스들의 부모 타입 자식 클래스들을 가리키기위해 소멸자의 가상함수 실제 클래스객체 실제 클래스 타입쪽에 소멸자가 호출되려면 가상 ..
-
win32 게임 만들기(6) - Key ManagerWindows Programming/win32 게임엔진만들기 2022. 4. 17. 15:18
update => 현 방식 코드가 수행하는 if구절에 가 봐야지만 왼쪽키 오른쪽키가 무슨 상황인지 알수 있음 우리 프로그램은 매 순간 업데이트를 거치고 모든 업데이트가 끝나면 화면에 렌더(그리기) 한다. 이 과정이 1프레임에 과정 키 매니저가 필요한 이유 1. 프레임 동기화 동일 프레임 내에서 같은 키에 대해, 동일한 이벤트를 가져간다. (같은 DT에 일어난 사건들은 같은 처리를 받아야 하지만 코드를 한줄한줄 읽어 실행하는 동안 같은 프레임 이더라도 키처리가 달라 질 수 있음) 2. 키 입력 이벤트 처리 tap, hold, away 키 입력 이벤트 정의 키의 상태와 눌린키 enum 타입 두개의 정보를 담는 구조체 tKeyInfo 초기화 함수 두개의 정보를 담는 구조체를 {NONE false} 로 LAST..
-
win32 게임 만들기(5)-Double BufferingWindows Programming/win32 게임엔진만들기 2022. 4. 17. 13:58
현재 상황 : 화면엔 잔상이 계속 남아있음 해결방안 생각 : 물체를 그리기 전에 화면을 한번 클리어 한후 그리기 작업을 실행 (해상도 크기와 동일한 하얀색 사각형을 그려 화면 청소를 함) 문제점 우리의 해상도 가 1280x768=983,040 매 프레임 마다 약 백만개의 픽셀을 255,255,255 색칠을 한다는건 너무 많은 작업 너무 느려짐 해결법 이중버퍼링(Double Buffering) 버퍼를 2개를 두고 렌더링을 양쪽으로 관리 물체의 변경(update)가 일어날때마다 그리는 작업을 내가 보는 화면이 아닌 다른 공간(비트맵)에 그려 놓고, 모든 그리기 작업이 완료된 시점에 내가 볼 화면으로 완성된 그림을 보여줌 윈도우는 내부적으로 작업영역에 대해서 픽셀을 보유 하게 되는데, 이 픽셀 데이터들을 다 ..
-
win32 게임 만들기(4)-TIMER (시간 동기화)Windows Programming/win32 게임엔진만들기 2022. 4. 1. 17:40
컴퓨터 성능에 따라서 그려지고 지워지는 즉 처리 속도가 달라지기 때문에 한 프레임 실행되는 양이 고정값이면 안된다. 시간 동기화 만약 우리 컴퓨터가 100fps 라고 가정해보자 1초 뒤에 100만큼 이동하려면 한번 수행 할때마다 1만큼이동 해야한다. 이동량/프레임 이동량을 프레임단위로 분할해서 이동을 시키면 = 프레임당 이동할 양이 나옴 우리는 한프레임당 시간 값 을 구할 필요가 있다. 아주 미세한 단위에 시간 Delta Time TimeMgr 클래스 생성 QueryPerformanceCounter() : 미세한 단위의 카운트를 셀수 있는 함수 QueryPerformanceFreQuency() : 초당 카운터가 얼마나 발생하는지 빈번도 값을얻음 update() : 한프레임에 걸리는 시간을 구함 전 카운트..
-
win32 게임 만들기(3) 움직이는 object 그리기(비동기 키 입출력)Windows Programming/win32 게임엔진만들기 2022. 4. 1. 16:03
1) 그릴 물체의 정보를 갖는 CObject 클래스를 하나 생성한다. 물체의 기본 정보 위치와 스케일을 받을 수 있게 변수를 설정! CCore::init() 함수에서 기본값을 초기에 설정 해준다. 2) CCore::progress() 함수에서는 이제 update() 와 render() 두개의 함수를 반복 실행 하게 되도록 변경 update() : 물체들의 변경점을 체크 render() : 변경된 물체의 좌표 값을 현재 장면을 그리기 우리는 코드가 수행되는 지금 이순간에 어떤 키가 눌렸는지 확인 해야한다. 그때 쓰는게 비동기 키 입출력 함수 GetAsynckeystate() 이다. GetAsynckeystate()는 현재 상태값을 반환 해주는데 0x8000 제일 상위 비트 값을 체크해서 on되있으면 지금 ..