-기본적인 WinApi의 클래스화-

-플레이어의 이동 & 총알 발사-

전까지는 아싸리, WinMain함수 내 cpp파일에서 beginPaint() ~ EndPaint() 사이에, 도형들을 그려주었는데, 이제는 MainGame이라는 클래스를 파서 거기서 사각형을 그려주기로 시작한다.

또, 중요한 작업이 이제 앞으로 우리는 사각형을 그릴 때, 전까지는 LEFT - TOP / RIGHT - BOTTOM 의 좌표를 갖고 사각형을 그렸다면, 이제는, 그 사각형의 중점좌표를 구해서 거기서 이제 rect.left좌표를 빼면 그게 결국 반지름이니~~ 이런식으로 해서 그릴 것이다.

예를 들어서, 이제부터 RECT의 left좌표는, 중점에서 그 사각형의 가로반길이를 뺀 것의 좌표와 같다~ 라는 수식으로 작성..

[1] 먼저 부모클래스인 오브젝트 클래스를 만들어서, 평소 클래스 작성 하듯 만들어주고, 특히 Render()함수에는, 이제 아싸리 그림 출력하는 용도의 함수이기 때문에, Render(HDC hDC)라고 써주자.

그리고, 이제 위에서 말한 구조체의 변수들을 가지고 작성했던 사각형 중점에서 가로길이절반을 빼서 left right구해놓은 식, 얘네들을 가지고 다시 사각형을 그릴 함수를 하나 만들어준다. (그, 부모클래스에서 이 함수가 그려준다는게 아니고, 그 사각형 그리는 식을 “다시 세팅”한다는 뜻의 함수, 그래서 Render()가 아닌, Update()함수에 박아넣음.

[2]. 이제 부모 클래스를 만들었으니, 자식으로 Player클래스를 만들어서, 상속관계를 지켜가며, override알아서 해주고, 특히 플레이어는 “키입력”을 받아서 움직여야 한다는 것을 기억하고, 입력키를 받는 함수를 추가해 주자.

[3]. 그리고 이 플레이어는 일단 지금은, maingame 클래스에서 할당해서 사용할 거라 계획 중이니, 할당하고 바아로 initialize하게 거기다가, 그 구조체 정보 값 박아주고, 이동시킬 그 속도값까지 작성해준다. Update()에는 당연히 키 입력을 계속 업데이트 시켜야하니, 키입력받는 함수를 작성하고, 키 입력 받고나서 다시~ rect를 그려줘야 하기 때문에, 왠만하면 ‘’키입력 같은 경우는, 키입력 함수 부터 호출하고 나서, Rect 그리는 함수를 호출하도록 한다.”

Render()함수에는 당연히, 그 hdc와 구조체 변수들을 이용한 그 중점에서 길이 뺀 그거 좌표식들을 써서 Rectangle함수들을 그려준다.

[4]. 본격적인 이동을 위해서 일단 키를 입력받아야 이동을 하던말던 할텐데, WinApi에서는 그 키 입력받는 함수가, 크게 2가지로, GetAsynKeyState / GetKeyState함수 2가지가 있다.

근데 보통 GetAsynKeyState를 쓴단다.. 근데 이게 주의할게, 또 호출속도가 존나빨라서, 사용자들이 따로 제어를 해줘야 한단다. 그거는 이제 우리가 c++할 때 공부했었던, 이동생성자가 복사생성자보다 얼마나 빠른가 볼라고 GetTickCount함수를 써서 그 시간차이를 비교했었는데, 바로 그 함수를 또 사용해서, 억까로 키입력함수의 호출속도를 제어해본다. 이 함수로 시간값을 만들어서, 반환을 해버리는 식으로.

[5]. 여기까지 과정 완료했으면, 한 번 플레이어가 사각형으로 화면 가운데에 생성이 되고, 키입력으로 잘 이동을 하나 확인해보게, MainGame클래스에 Player클래스를 할당해서 진행해보자.