hyrule 2022. 6. 7. 23:30

http://hyrule.tistory.com/111 

 

*** 공부 방법 ***

1. 코딩을 해야 하는 부분은 첫 부분에 변수나 함수, 메소드에 대한 선언이 코드블럭으로 표시되어 있다. //ex) MakeFunction(); 2. 코드블럭 하단에는 해당 선언에 대한 구현 로직이 작성되어 있다. 처

hyrule.tistory.com

 


[ 오류 해결 ]

- CEffect 클래스의 Render Layer이 Default로 되어있던 문제 수정.

-- 생성자에서 변경해 주었음.

더보기
CEffect::CEffect():
	m_Duration(0.f),
	m_Time(0.f),
	m_EffectType(EEffectType::Once)
{
	m_RenderLayer = ERenderLayer::Effect;
}

 

- CScene의 Update, PostUpdate 과정에서 UI의 제거 과정에 continue문이 없어 댕글링 포인터가 발생하는 현상을 수정.

더보기
			if (!(*iter)->GetActive())
			{
				iter = m_vecWidgetWindow.erase(iter);
				iterEnd = m_vecWidgetWindow.end();
				continue; // << 이 부분
			}

 


class CProgressBar: public CWidget

- CWidget의 상속을 받아 생성한다.

 

변수의 사용처

 

 

{ enum class EProgressBar_TextureType }

- 프로그레스 바에는 2개의 이미지가 필요하다.

1. 프로그레스 바의 틀(Back) / 2. 프로그레스 바 내부(Bar)

- 여기에 이미지를 직접 삽입해서 출력하거나, 기본 도형 출력 함수를 이용해 출력할 수 있도록 열거체를 만든다.

- 배열에 사용할 것이므로 추가로 End 항목까지 만들어 준다.

 

{ enum class EProgressBar_Dir }

- 이 프로그레스 바의 방향을 설정한다.

- 왼쪽 -> 오른쪽으로 찰것인지, 오른쪽 -> 왼쪽, 위 -> 아래, 아래 -> 위 등

 

 

{ CSharedPtr<class CTexture> m_Texture[(int)EProgressBarTextureType::End] }

- 텍스처 주소를 저장할 포인터 변수

 

{ EBrogressBar_Dir m_Dir }

- 이 프로그레스 바가 어디를 향해 채워질 것인지(왼->오 / 오->왼 / 위->아래 / 아래->위 4가지)

 

{ float m_Value }

- 0~1의 비율로, 바가 얼마나 차있을지 결정하는 변수

< SetValue(), AddValue() >

- 비율을 정하거나 원하는만큼 더해 줌.

 

{  BoxInfo m_BarPos }
{ float m_Padding }

 

 

< Update() >

- 매 프레임마다 m_BarPos를 초기화하고, 어디서부터 그려야 할지 계산한다.

- switch문을 통해 프로그레스 바가 어디를 향해 채워지는지에 따라 어떻게 계산을 다르게 해준다.

-- 왼 -> 오라면 오른쪽 끝의 위치는 왼쪽 끝의 위치 + 바의 사이즈 * 비율이 될것이다.

-- 오 -> 왼 이라면 왼쪽 끝의 위치를 바꿔주어야 할것이다.

-- 위 -> 아래라면 아래 끝의 위치를 바꿔주어야 할것이다.

-- 아래 -> 위라면 위 끝의 위치를 바꿔주어야 할것이다.


class CMonsterHPWindow: public CWidgetWindow

- 새 위젯 윈도우를 만들어서 CMonster 클래스를 따라다니면서 위의 CProgressBar로 체력바를 표시하도록 해보자.

- 여기서 CProgressBar를 생성하고 CMonster의 주소를 확인한 후, CMonster의 체력을 지속적으로 프로그레스 바에 전달해 준다.

- 몬스터가 죽었을 경우 같이 삭제되는 예외 처리도 해 주어야 한다.

GameFrameworkStepbyStep_60_ProgressBar.zip
4.93MB