C++ 에서 사용 할 수 있는 기능중 상속과 다형성을 사용하는데 개념은 아래와 같다.
상속 : 부모 클래스의 기능을 자식 클래스에서 상속을 받아 사용 한다. 큰 특징은 자식 클래스들은 점점 구체화 됨.
예를 들어 자동차 설계도로 애기 하자면 부모 클래스는 간단한 뼈대의 구조만 있다면 상속 받은 자식 클래스 들은 점점 기능을 붙여 나가면서 점점 구체화 된다는 점
다형성 : 부모 클래스의 공통으로 사용되는 함수 및 기능은 자식 클래스 에서 오버라이딩 형태로 사용
예를 들어 자동차의 공통 기능 브레이크 가정 하면 상속받은 A, B라는 차는 공통점으로 브레이크 기능을 호출 해서 사용 가능 하고 이 추가적 으로 UpCasting, DownCasting 개념이 같이 들어가 있다.
위에 2가지 개념을 가진체로 기존의 Rect 클래스를 상속받는 형태의 자식 클래스 만들어서 몇가지 기능을 넣어서 사용 할 예정
1. Rect_Control.h
1. 부모 클래스를 사용 하기 위해 헤더 파일에 include 사용
2. class 선언부 옆에 public 붙여서 부모 클래스를 넣어서 상속
3. 생성자에서 부모클래스 에서의 생성부분을 비슷하게 선언
4. 이동 기능을 구현
#pragma once #include "Rect.h" class Rect_Control : public Rect { public: Rect_Control(Shader* shader); Rect_Control(Shader* shader, Vector2 position, Vector2 scale, D3DXCOLOR color = D3DXCOLOR(1, 1, 1, 1)); void MoveLeft(); void MoveRight(); void Movespeed(float val); //셋팅용 FORCEINLINE float Movespeed() { return Speed; } private: float Speed = 0.1f; };
2. Rect_Control.cpp
1. 생성자 부분에 부모클래스에 값을 넣을 수 있도록 셋팅
2. MoveLeft, Right 쪽에 Position() 같은 경우 부모쪽에 있는 vector2 position값을 가져오기 위한 함수를 호출 및 다시 셋팅
#include "stdafx.h" #include "Rect_Control.h" Rect_Control::Rect_Control(Shader* shader) : Rect(shader) { } Rect_Control::Rect_Control(Shader* shader, Vector2 position, Vector2 scale, D3DXCOLOR color) : Rect(shader, position, scale, color) { } void Rect_Control::MoveLeft() { Vector2 pos = Position(); pos.x -= Speed; Position(pos); } void Rect_Control::MoveRight() { Vector2 pos = Position(); pos.x += Speed; Position(pos); } void Rect_Control::Movespeed(float val) { Speed = val; }
3. 수정
Rect.h
기존에 소멸자 부분을 virtual 사용을 해서 소멸자 호출 하면 부모 -> 자식 순으로 자기 자신을 마지막에 삭제

Scene.cpp
Rect클래스처럼 선언 및 셋팅
※ 이거 이외도 Update(), Render()... 각종 함수 에서도 값을 셋팅

Scene.cpp -> Update()
키를 입력 받아서 Rect_Control 좌우로 움직이는 기능과 ImGui를 통해서 이동 속도 조절

실행
간단하게 좌우로 움직이고 조작해서 이동속도 조절하는 흰색 네모를 구현
https://github.com/ascher8159/DX2D
DX2D_11
'DirectX > DirectX 2D' 카테고리의 다른 글
DX2D_13 Rect_Control (1) | 2022.12.24 |
---|---|
DX2D_12 Time (System) (0) | 2022.12.15 |
DX2D_10 Rect (0) | 2022.12.07 |
DX2D_9 WVP2 (1) | 2022.12.04 |
DX2D_09 WVP (0) | 2022.12.01 |