본문 바로가기

Win32 API42

Win32 API 기초 : Animation (1) 게임의 중요한 요소인애니메이션을 구현하겠습니다. 오브젝트는 Component인 Animator를 보유하고 있고,Animator는 다양한 Animation을 보유하고 있습니다. 그래서 오브젝트는 애니메이션에필요한 텍스처를 Animator를 통해서 불러오고 움직이는 것처럼 보이게 할 겁니다. 그래서 오브젝트 클래스에  CAnimator형 포인터 멤버 m_pAnimator를두어 Animator를 가리킬 수 있게 합니다.  CAnimator 클래스는  map형 멤버 m_mapAnimation를두어 키-값이 문자열이며실질적인 데이터는 CAnimation을 가리키는 포인터인 여러 노드들을 관리할 것입니다.  그리고 CreateAnimation 함수를 통해애니메이션을 추가하거나, FindAnimation 함수를통해 .. 2024. 8. 19.
Win32 API 기초 : Object (1) 기존에 존재하는 오브젝트와똑같은 오브젝트를 만드려고 하면기본 복사 생성자를 통해 새로운오브젝트가 생성이 될 겁니다. 하지만 그럴 경우 문제가 될 수 있는 점은, 다른 멤버들은 괜찮지만Collider를 가리키고 있는 멤버m_pCollider의 값이 그대로 복사가 되면, 아래 그림처럼 서로 값만 같고 실제로는 다른 두 오브젝트가하나의 Collider를 공유하는 상황이 발생하죠.  이를 방지하기 위해 오브젝트의복사 생성자를 직접 구현해야 합니다.  직접 구현한 CObject 클래스의 복사 생성자를 보시면 위칫값이나 크깃값, 오브젝트의 이름은그대로 복사를 진행하고 Collider는 우선 nullptr로 초기화를 진행한 후, 새롭게 동적 할당한 공간에인자로 받은 오브젝트의 Collider와 같은 값을 가진Coll.. 2024. 8. 18.
Win32 API 기초 : Scene (1) 시작 씬에서 Enter를 누르면Tool 씬으로 전환하도록 할 겁니다. 그러기 위해선 CScene_Start 클래스에update 함수를 오버라이딩하여 새롭게 구현해야 합니다. 자식 클래스의 update 함수에서도부모 클래스인 CScene 클래스의 update 함수를실행하고 거기에 if 문을 더 추가하여 Enter를 입력할 시 ChangeScene 함수가호출되는 방식이죠.  Tool 씬을 인자로 넣습니다.  ChangeScene 함수 역시,  전역 함수처럼 사용하기 위해func 헤더 파일과 소스 파일에 구현하였습니다. tEvent형 변수 even의 멤버 eEvent에는 씬 변경 이벤트임을 나타내기 위해 CHANGE_SCENE를 대입,멤버 lParam에는 어떤 씬으로 변경할지를 나타내기 위해인자로 받은 씬의 .. 2024. 8. 18.
Win32 API 기초 : Event Manager (3) 플레이어의 발사체와 몬스터가 충돌하면몬스터가 화면 상에서 제거되도록 하겠습니다. CObject 클래스에 존재하는 OnCollisionEnter 가상 함수를 CMissile 클래스에서 오버라이딩하여 구현합니다. 인자로 받은 Collider형 포인터 _pOther가 가리키는 Collider가 달려있는 오브젝트를 pOtherObj가 가리키도록 합니다. pOtherObj가 가리키는 오브젝트의 이름이"Monster"라면 발사체 자기 자신을 제거하도록DeleteObject 함수를 호출하고 자기 자신을 인자로 넘깁니다.  DeleteObject 함수는 전역 함수처럼 사용할 수 있는 오브젝트 제거를 위한 함수입니다. tEvent형 지역 변수 even의 멤버 eEvent에DELETE_OBJECT 이벤트로 설정하고lPar.. 2024. 8. 16.
Win32 API 기초 : Event Manager (2) 이벤트 매니저를 통한오브젝트의 생성과 제거를 구현하겠습니다. CEventMgr 클래스의 헤더 파일을 보시면 vector형 멤버 m_vecDeadObj가 추가되었습니다. 해당 멤버는 제거될 예정인 오브젝트를 저장하는 vector이죠. 생성되는 오브젝트와 다르게, 제거할 오브젝트는 따로 보관하고 있죠. 이유는 만약 현재 프레임이 58 프레임이고오브젝트 1이 제거되었다고 합시다. 그래서 58 프레임 마지막 순간에 오브젝트 1을 제거하고이를 다음 프레임인 59 프레임에 적용시키려고 합니다. 이때 문제가 될 수 있는 점은 오브젝트 1과 관련된다른 오브젝트들은 오브젝트 1이 제거된 사실을 59 프레임 때 모른다는 것이죠. 그래서 관련된 오브젝트들이 오브젝트 1에 접근하려고하면 실제로는 제거가 되었으므로 문제가 발생.. 2024. 8. 15.
Win32 API 기초 : Collider 활용 & Event Manager (1) 충돌 여부를 판정할 수 있는 함수를 구현했는데,실제 충돌 후 발생하는 동작은 오브젝트마다다를 수 있습니다. 즉 충돌이 발생한 경우 오브젝트마다다 다르게, 충돌 이벤트를 구현해야 하는 것이죠. 예를 들어 플레이어가 몬스터가 발사하는미사일에 맞았을 때 10의 데미지를 받고,플레이어가 몬스터와 직접 닿았을 때는30의 데미지를 받으며 밀려나는 동작을 수행하고 싶습니다. 첫 상황은 플레이어의 Collider와몬스터 미사일의 Collider와의 충돌이고,두 번째 상황은 플레이어의 Collider와몬스터의 Collider와의 충돌이죠. 그렇다고 이것을 구현하기 위해 Collider 클래스를 파생시켜플레이어 타입의 Collider 자식 클래스를,몬스터 타입의 Collider 자식 클래스,미사일 타입의 Collider .. 2024. 8. 11.