2022. 12. 21. 00:01ㆍ개인공부/Win32API
기존의 GetMessage 의 경우에는 게임제작에 적합하지 않은 방식이였기 때문에
PeekMessage 함수를 이용해서 메세지가 들어온 경우를 처리 해주었다. 그러나 메세지 처리하는 쪽의
비율이 너무나 작기 때문에 else 쪽의 메세지가 발생하지 않는 대부분의 시간을 이용하여 game 코드를
수행하도록 하였다. 그러기 위해서 CCore 클래스를 이용해서 기능들을 구현하고자 했고 이 CCore 의
디자인형태는 싱글턴 패턴으로 설계하기로 하였다.
싱글턴 패턴은 클래스를 호출하면 인스턴스가 1개만 생기기 때문에 2개이상 생기지 않는 설정이필요로했다.
CCore 를 외부에서 초기화 하지 못해야하므로 접근지정자를 이용한다.
static CCore* GetInst() => 정적변수로 선언하면 GetInst() 는 코어포인터를 반환한다.
{
static CCore mgr; => 만약 반환과정에서 코어가 생성되지 않았다면 생성해주고
return &mgr 생성되었다면 데이터영역에 생성되어있는 기존의 코어를 반환해준다.
}
private:
CCore(); =>외부에서 초기화 하지 못해야하므로 접근지정자를 이용한다.
~CCore();
이런식으로 #define 전처리 과정으로 SINGLE(CCore) 는 전처리 되어있다.
필수적인 멤버함수들을 가진다.
이후 main 함수에서 Core 를 초기화 해주는데 윈도우 방식으로 초기화 시켜 주었다.
위의 POINT 에 원하는 해상도 값을 입력하면 해상도에 맞게 윈도우의 크기를 조정시켜준다.
초기화 이후에는 메세지가 입력되지 않으면 progress() 함수로 이동하는데
이 함수는 update와 render 영역을 나뉜다.
update는 키입력을 받아서 그려준 사각형을 좌표를 이동시키고
render 의 경우에는 그값을 가지고 사각형을 그려준다.
하지만 이과정에서 문제점이 발생했는데
첫번째로는 키보드를 쭉누르면 호출하는 만큼 입력이 발생되어
초당 4만번정도를 움직이게 되어 사각형이 보이지도 않을 속도로
이동하는 문제점이 발생했다. 그리고 이문제는 컴퓨터의 성능에
영향을 받으므로 좋은 컴퓨터는 빠르게 움직일 수 있으므로 게임
구현에는 적합하지 않은 방식을 가지고 있기때문에 수정이 필요했다.
두번째로는 그리기 기능만 있어서 사각형이 지나간 자리에는 잔상이
남는 문제점이 있다.
다음 정리는 첫번째 문제를 해결하기 위한 TimeMgr 클래스에 대해서 정리할 예정이다.
'개인공부 > Win32API' 카테고리의 다른 글
Object (0) | 2022.12.25 |
---|---|
KeyManager (2) | 2022.12.24 |
TimeManager (0) | 2022.12.23 |
PeekMessage (0) | 2022.12.19 |
WM_PAINT (2) | 2022.12.18 |