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 |