WinApi/Brotato 모작 11

[Win32 API Brotato 모작] 11. Scene_Start

이번에는 전투가 직접적으로 일어나는 장면 Scene_Start에 대해 알아보겠다.Scene_Start#pragma once#include "CScene.h"class CPanelUI;class CScene_Start : public CScene{private: ID2D1Bitmap* g_pBitmap; // 전역 또는 멤버 변수로 선언 Vec2 m_vForcePos; float m_fForceRadius; float m_fCurRadius; float m_fForce; bool m_bUseForce; CPanelUI* m_pPausePanel; vector m_vecPauseObj; CPanelUI* m_pFailPanel; ..

[Win32 API Brotato 모작] 10. Scene_Run_End

이번에는 게임 플레이가 종료 된 후에 나오는 결과 화면에 대해 알아보자. 사실 이 Scene 진짜 별거 없다. 이때까지 나왔던 객체들의 위치만 조정해서 보여주는 방식이 전부다.  이 씬에서는 player의 능력치와 보유한 무기와 아이템을 보여주는 기능과 다음과 같은 기능을 제공한다.재시작을 누를 시 웨이브 다시 시작새로운 달리기를 누를 시 캐릭터 선택화면 부터 다시 시작메인 메뉴로 돌아가기결과화면은 플레이어의 체력이 0에 도달하면 달리기 패배 문구와 함께 해당 화면이 나오게 된다.CScene_Run_End#pragma once#include "CScene.h"#include "Direct2DMgr.h"class CPanelUI;class CScene_Run_End : public CScene{pri..

[Win32 API Brotato 모작] 8. Scene_Select_Weapon

이번에는 무기 선택화면에 대해 설명하겠다. 무기 선택화면도 캐릭터 선택과 유사한 방식으로 구현하였다.CScene_Select_Weapon#pragma once#include "CScene.h"#include "CharacterInfoMgr.h"class CBtnUI;class Direct2DMgr;class CScene_Select_Weapon : public CScene{private: tCharacterInfo* m_stSelectedInfo;public: virtual void update(); virtual void render(ID2D1HwndRenderTarget* _pRender);public: void SetSelectedCharacterInfo(tCharacte..

[Win32 API Brotato 모작] 7. Scene_Select_Character

이번에는 캐릭터를 선택하는 장면에 대해 알아보자.CScene_Select_Character#pragma once#include "CScene.h"#include "CharacterInfoMgr.h"class CBtnUI;class CScene_Select_Character : public CScene{private: vector m_vCharaters;public: virtual void update(); virtual void render(ID2D1HwndRenderTarget* _pRender);private: void CharacterMapping(CBtnUI* _btn, int i, int j, wstring& tag);public: virtual void Ente..

[Win32 API Brotato 모작] 5. Object

이번에는 이 프로그램에서 그려질 모든 객체의 부모 클래스이자 추상 클래스인 CObject 클래스에 대해 설명하겠다. CObject를 상속받는 자식 클래스들은 다음과 같다.CDamagedUI : 몬스터에게 데미지를 입힐 때 얼만큼의 피해를 입혔는지 숫자로 표시하기 위한 클래스Ground : 전투 맵 상에서 맵 밖으로 빠져나가지 못하게 하기 위해 벽을 구현할 클래스Missile : 총기류 무기들의 탄환을 구현하기 위한 클래스Monster : 몬스터Player : 유저 플레이어UI : 화면상에 Text를 표현하거나, 뒷 배경과 같은 Panel, 버튼을 구현하기 위한 클래스Weapon : 플레이어가 소지할 무기CObject 멤버 변수private: GROUP_TYPE m_ObjType; wstring m_..

[Win32 API Brotato 모작] 4. Core & Scene

이번에는 CCore 클래스의 progess 함수에 대해 살펴보겠다.void CCore::progress() { // ============ // Manager Update // ============ CTimeMgr::GetInstance()->update(); CkeyMgr::GetInstance()->update(); CCamera::GetInstance()->update(); CSoundMgr::GetInstance()->update(); // ============ // Scene Update // ============ CSceneMgr::GetInstance()->update(); // 충돌 체크. CCollisionMgr::GetInstance()->update(); //UI 이벤트 체크 ..

[Win32 API Brotato 모작] 3. Main & Core & Manager (3)

마지막으로 설명한 Manager 클래스는 Direct2DMgr이다. 처음에는 GDI와 GDI+를 이용하여 화면을 렌더링하는 방식을 사용했는데, 앞서 CTimeMgr를 이용하여 FPS를 구해보니 매우 처참한 성능이 나왔다. 전투맵에서 타일맵만 렌더링했는데 FPS가 20~40대가 나왔다.  그래서 채택한 방식이 Direct2D를 이용하여 이미지파일과 객체들을 렌더링하는 방법을 사용했다. 그 전에 먼저 알고가야할 개념이 하나 있다. 바로 더블 버퍼링(Double Buffering)이다. 더블 버퍼링 ( Double Buffering )더블 버퍼링은 컴퓨터 그래픽스와 사용자 인터페이스에서 화면을 업데이트하거나 애니메이션을 표시할 때 발생하는깜박임(flickering) 현상과 같은 시각적 문제를 해결하기 위해 사..

[Win32 API Brotato 모작] 2. Main & Core & Manager (2)

이전 포스트에 이어서 CFontMgr, CEventMgr, CCollisionMgr, CSceneMgr, CUIMgr를 살펴보겠다.#include "pch.h"#include "CFontMgr.h"#include "CPathMgr.h"#include "CFontCollectionLoader.h"CFontMgr::CFontMgr() : m_pDWriteFactory(nullptr){ DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), reinterpret_cast(&m_pDWriteFactory));}CFontMgr::~CFontMgr(){ delete[] m_fontFamilies; for (auto f..