WIN32API FrameWork/한단계씩 직접 구현

63. 위젯 컴포넌트

2022. 6. 9. 00:54

http://hyrule.tistory.com/111 

 

*** 공부 방법 ***

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

hyrule.tistory.com

 


 

class CWidgetComponent: public CWidgetWindow;

- 여태까지는 게임오브젝트를 따라다녀야 하는 위젯들은 손수 주소를 받아서 위치를 구했었다.

- 그런데 위젯은 종종 게임오브젝트를 따라다닌다 -> 아예 이걸 미리 설정해놓은 '위젯 컴포넌트'를 만들면 편할 것이다.

 

- CWidgetWindow 클래스를 상속받아 조금 개조해서,

CGameObject에서도 생성 가능하게 해주고, 

CGameObject에서 생성 시 지속적으로 CGameObject를 따라다니도록 만든다.

 

-- 그런 다음 CGameObject에서 필요한 위젯을 CWidgetWindow에서 만들게 시킨 뒤

Offset값만 정해 주면,

해당 CGameObject에서 일정 거리만큼 떨어진 채로 따라다니게 만들 수 있을 것이다.

 

- 기존의 CWidgetWindow는 이런 방식으로 사용했었다. 박스 내부의 양수 좌표값에서만 사용 가능했지만

 

 

- 하지만, 상속받아 개조하는 CWidgetComponent:public CWidgetWindow는

이렇게 사용한다. Offset 값을 통해 마이너스 좌표값까지 끌어다 쓰는것이다.

 

{ class CGameObject* m_OwnerGameObj }

- 상속해서 새로 만들어붜야 할 변수는 이게 전부이다.

.

< CollisionMouse() >
- 재정의해서 그냥 무조건 false를 반환하도록 만들자. 마이너스 좌표까지 사용하므로 충돌처리를 하면 안된다.

 

< Update, PostUpdate, Render >
- 일단 전부 재정의를 해주고 코드 똑같이 긁어와서 없앨 부분만 없애준다.

-- 가장 먼저 해야할 일은, 주인 오브젝트의 위치를 따라가는 것이다. 주인 오브젝트와 카메라의 위치정보를 받아와서 이 UI가 화면의 어디에서 렌더링되어야 하는지를 m_Pos에 저장해 놓는다.

 

< Render() >

 


class CGameObject

 

{ CSharedPtr<class CWidgetComponent> m_WidgetComponent; }

- 일단은 nullptr로 설정해놓고,

 

< void CreateWidgetComponent(); >

- 이 메소드를 호출하면 동적할당하여 하나 만들어준다.

- 공유 포인터를 사용하므로 따로 제거는 안 해줘도 된다.


- 이렇게 설정해주면 이제 게임오브젝트를 따라다니는 UI의 설정이 매우 간단해진다.

- 몬스터의 초기화 과정에서 CWidgetComponent를 생성하고, Offset을 포함한 기초 설정을 해준 뒤,

 

- Update 과정에서 위에서 CWidget을 생성하면서 포인터 변수를 만들어 저장해 두었다면 해당 포인터 변수를 통해 숫자를 변경하면 되고,

그렇지 않다면

m_WidgetComponent->FindWidget<CProgressBar>("MonsterHPBar")->SetValue(m_HP / m_HPMax);
m_WidgetComponent->FindWidget<CWidgetNumber>("MonsterHPNum")->SetNumber((int)m_HP);

- 이런 식으로 아예 생성해둔 위젯컴포넌트를 통해 접근해서 위젯에 정보를 전달해 주면 되기 때문이다.

 

- 기존에 쓰던, CMonster의 체력바와 남은 체력을 숫자로 표시해주던 CWindowMonsterHP 클래스를 생성하는 대신 CWidgetComponent를 통해 몬스터의 체력바와 남은 체력을 출력해 보았다.

메모리 누수 없이 잘 작동한다.
GameFrameworkStepbyStep_63_WidgetComponent.zip
8.75MB

저작자표시 (새창열림)

'WIN32API FrameWork > 한단계씩 직접 구현' 카테고리의 다른 글

64. 텍스트 출력  (0) 2022.06.09
멤버함수와 전역함수의 이름이 겹칠 때  (0) 2022.06.09
62. 숫자 이미지 위젯  (0) 2022.06.08
61. 폰트  (0) 2022.06.08
60. 프로그레스 바  (0) 2022.06.07
'WIN32API FrameWork/한단계씩 직접 구현' 카테고리의 다른 글
  • 64. 텍스트 출력
  • 멤버함수와 전역함수의 이름이 겹칠 때
  • 62. 숫자 이미지 위젯
  • 61. 폰트
hyrule
hyrule
hyrule
C++ 프로그래밍 공부
hyrule
전체
오늘
어제
  • 분류 전체보기 (205)
    • C++기초 (50)
    • WIN32API FrameWork (109)
      • 한단계씩 직접 구현 (82)
      • 원본 (15)
      • 코드별 설명 개별저장(검색용) (12)
    • 자습 (21)
    • C++ TIPS (11)
    • 연습 노트 (3)
    • ETC (6)
    • DX2D StarCraft 모작 (1)

블로그 메뉴

  • 홈
  • 방명록

공지사항

인기 글

태그

  • hello
  • 스타크래프트
  • Tistory
  • Windows 11
  • C++
  • notion

최근 댓글

최근 글

hELLO · Designed By 정상우.
hyrule
63. 위젯 컴포넌트
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.