분류 전체보기(227)
-
멀티 쓰레드
쓰레드 사용 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 29 30 31 32 33 34 // 첫 쓰레드 #include #include using std::thread; void func1(){ for (int i = 0; i
2023.07.24 -
스타크래프트 기능 구현 3
구현내용 1. 체력 Bar 현재는 Unit 컴포넌트가 여러가지 컴포넌트를 가지고 전체적인 이벤트들을 처리하고 있다. BarUI를 예를 들면 Unit 컴포넌트가 Start 함수에서 BarUI의 주소를 받아오고 Unit의 체력이 조정될때 BarUI의 길이를 바꾸는 형식으로 구현하였다. 조정을 받은 BarUI는 자신의 정보들을 가지고 랜더링을 시작한다. 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 void BarUI::PostRender(D2DRenderer* _d2DRenderer) { // 게임오브젝트의 위치를 가져온다 Transform* transform = GetComponent(); Vector2 position..
2023.07.16 -
스타크래프트 기능 구현 2
구현내용 간단하게 유닛의 공격, 추적 상태들을 만들어서 적용했다. 유닛의 공격범위를 벗어나면 유닛은 추적하고 공격범위 내에 있으면 공격하게 된다. 어려운 점 처음으로 게임에서의 공격 시스템을 만들고 있는데 정말로 고려해야 하는 점이 많았다. 먼저 컴포넌트로 가지는데 어떠한 구조로 설계할까부터 시작해서 유닛이 가져야 하는 정보, FSM 등 정말로 고려해야 할 점이 많다. 스타크래프로 하기를 잘한 거 같다. 무작정 코드를 작성하고 있는데 생각할 점이 많아서 도움이 되는 거 같다. 다음 목표 간단하게 유닛이 체력바를 구현하고 유닛이 공격을 받아서 유닛의 체력이 0이 되면 삭제되는 것이 다음 목표이다.
2023.07.14 -
충돌 연산 최적화
Dynamic AABB Tree 문제점 O 내가 구상하고 있는 게임은 스타크래프트 유즈맵 느낌의 디펜스 게임을 제작하기 위해서는 100개 이상의 오브젝트들이 필요했고 서로 충돌처리를 해서 시야를 감지하고 밀어내는 과정이 필요했다. O 원래 엔진의 구조 충돌연산구조는 단순 비교로 n^2의 시간복잡도를 가지고 있었다. 물론 오브젝트를 타입별로 나눠서 충돌을 체크했지만 그래도 같은 오브젝트의 개수가 100개 이상이 되면 프레임이 정말 떨어지는 문제점이 있었다. 해결방안 O N^2 Broadphase가 아닌 Dynamic AABB Treef를 적용해서 연산을 최적화하자 O CollisionManager를 N^2에서 Dynamic AABB Tree로 리팩토링 해보자 해결과정 O Dynamic AABB Tree 참..
2023.07.12 -
스타크래프트 기능 구현 1
스타크래프트1에서 필요한 기초적인 기능들을 구현하였다.
2023.07.10 -
카메라
기본적인 카메라의 확대, 축소, 이동, 회전을 구현하였다. BeginRender 함수를 호출하면 최종행렬을 계산하여 최종행렬 값으로 오브젝트들을 그린다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 void D2DRenderer::BeginRender() { m_IsD2DResReady = CreateDeviceResources(); // 디바이스 종속적 자원들이 문제 없고, 랜더링을 할 수 있는 상황일 때 if(SUCCEEDED(m_IsD2DResReady) && !(m_renderTarget->CheckWindowState() & D2D1_WINDOW_STATE_OCCLUDED)) { m_renderTargetSize = m_rend..
2023.07.06