Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 17070번
- 백준 1103번 게임
- 2870번 수학숙제 c++
- 오브젝트 풀링
- 백준 c++ 2870번
- Beakjoon
- Algorithm
- Unity
- 플레이어 이동
- 코딩테스트
- 2870번
- Lv2
- c++
- 코테
- 백준 1103번 c++
- 백준 17070번 c++
- 수학숙제
- Lv.3
- 2870번 수학숙제
- 유니티
- 백준
- dfs
- 프로그래머스
- 백준 17070번
- C#
- 2468 c++
- 백준 c++ 2468번
- 2870번 c++
- 백준 1103번
- 백준 2870번
Archives
- Today
- Total
주녘공부일지
[C++] 종스크롤 슈팅 게임 ( WinAPI ) 본문
게임 플레이 영상
종스크롤 슈팅 게임 ( WinAPI )
- 유니티 강의에 나오는 리소스를 이용하여 만든 종스크롤 슈팅 게임 ( 리소스 출처 : 골드메탈 )
- 어소트락에서 제공하는 Win32API 무료 강의를 레퍼런스로 아키텍처 설계
- 스테이지를 클리어하며, 최고 점수를 기록하는 게임
- 스테이지는 텍스트 데이터로 세팅 할 수 있으며, 설정된 모든 스테이지를 클리어 했을 경우, 마지막 스테이지가 반복되며 보스 몬스터의 패턴이 강화됨
https://github.com/godgjwnsgur7/WinAPI_FlightShootingGame
Game Progress
- 1프레임당 진행되는 게임 흐름
- Update -> Render -> Event
void CCore::Progress()
{
// Update
CTimeMgr::GetInst()->Update();
CKeyMgr::GetInst()->Update();
CCamera::GetInst()->Update();
CSceneMgr::GetInst()->Update();
CCollisionMgr::GetInst()->Update();
CUIMgr::GetInst()->Update();
// Render
Clear();
CSceneMgr::GetInst()->Render(m_pMemTex->GetDC());
CCamera::GetInst()->Render(m_pMemTex->GetDC());
BitBlt(m_hDC, 0, 0, m_ptResolution.x, m_ptResolution.y, m_pMemTex->GetDC(), 0, 0, SRCCOPY);
// Event 지연처리
CEventMgr::GetInst()->Update();
}
Scene & Collision
- 씬 매니저에 의해 제어되는 씬 객체는 모든 오브젝트들을 관리 및 제어
- 각 씬은 GroupType을 가지며, GroupType의 순서대로 업데이트 및 랜더링
+ 각 씬에서 충돌 이벤트를 발생시킬 대상을 지정하여 지정된 그룹끼리만 충돌체크
class CScene
{
protected:
vector<CObject*> m_arrObj[(UINT)GROUP_TYPE::END];
wstring m_strName;
public:
void SetName(const wstring& _strName) { m_strName = _strName; }
const wstring& GetName() { return m_strName; }
virtual void Start();
virtual void Update();
virtual void FinalUpdate();
virtual void Render(HDC _dc);
virtual void Enter() = 0;
virtual void Exit() = 0;
public:
void DeleteGroup(GROUP_TYPE _eTarget);
void DeleteAll();
public:
void AddObject(CObject* _pObj, GROUP_TYPE _eType) { m_arrObj[(UINT)_eType].push_back(_pObj); }
const vector<CObject*>& GetGroupObject(GROUP_TYPE _eType) { return m_arrObj[(UINT)_eType]; }
vector<CObject*>& GetUIGroup() { return m_arrObj[(UINT)GROUP_TYPE::UI]; }
public:
CScene();
virtual ~CScene();
};
/// <summary>
/// 렌더링 순서가 됨
/// </summary>
enum class GROUP_TYPE
{
DEFAULT = 0,
TILE,
GROUND,
WALL,
BOOM_EFFECT,
EXPLOSION_EFFECT,
PLAYER_SUBUNIT,
ITEM,
PROJ_PLAYER,
PROJ_MONSTER,
MONSTER,
PLAYER,
BOSSMONSTER,
UI_OBJECT = 30,
UI = 31,
END = 32,
};
Event
- 해당 프레임에서 발생한 이벤트를 받아 일괄적으로 처리함
ex) 씬 이동, 객체 생성, 객체 파괴 등
+ UI Event는 UIMgr에서 제어 ( 마우스 이벤트를 해당 UI에 전달 )
+ Collision Event는 CollisionMgr에서 제어 ( 충돌 이벤트를 해당 객체들에게 전달 )
struct tEvent
{
EVENT_TYPE eEven;
DWORD_PTR lParam;
DWORD_PTR wParam;
};
class CEventMgr
{
SINGLE(CEventMgr);
private:
vector<tEvent> vecEvent;
vector<CObject*> vecDead;
public:
void Update();
private:
void Excute(const tEvent& _eve);
public:
void AddEvent(const tEvent& _eve) { vecEvent.push_back(_eve); }
};
Sound
- SoundMgr는 게임 실행 시 모든 사운드를 ResMgr에게 캐싱할 것을 요청해 둠
'GameDevelopment > [C++] Project' 카테고리의 다른 글
[C++] 벽돌깨기 게임 ( WinAPI ) (1) | 2024.09.15 |
---|---|
[C언어] 콘솔 비행기 게임 (1) | 2024.09.11 |