[DirectX11] DX 포트폴리오 개발 일지

라멘커비·2024년 4월 11일
0

DirectX 2D

목록 보기
11/24

바바이즈유 개발 일지

오늘 IndexToPos, PosToIndex 만들고
TestMap 띄워두기는 했다.


우리 바바 인덱스 [0][0]에 있는 것좀 보세요 카와이.

권장 계획

충돌체 필요없음

ULevel ⇒ ATileLevelMode 같은거 만들어서 얘를 상속받게해서
std::map<int64, std::shptr> 있게 하기 // int64 : FIntPoint

모든애들은 AActor 상속받는 타일

class Tile
{
public:
	FIntPoint PosToIndex(); // GetIndex();
}

모두 타일이어야하기 때문.

1. DebugMessage로 인덱스 띄워서 눈으로 볼 수 있어야 한다.

오늘 여까지

그리고 Tile을 상속받는 Baba(다 바바로 보시는중 ㅋㅋ)

2. Testmap을 만들든 뭐하든 해서 이 게임에서 등장하는 모든 타일 들어가있으면 된다.

3. 미는 거 만든다.

4. 로직 만든다. (ex: rava 닿으면 죽는거 확인)

여기까지가 다음주 화요일까지 가능해야함

5. 1 스테이지 만든다.

(맵에디터 만든다)

6. 스테이지 셀렉트 스테이지 만든다.

7. 스테이지 양산.

CPP

람다 == 함수.

람다는 기본적으로 virtual function과 같은 개념이다. 근데 클래스 만들기 귀찮잖앙

아무 관계없는 다른 클래스의 함수나 전역함수로도 대신 실행시켜주는 개념과 방식 : CallBack이라 함

virtual, functional 다 표현식이 다른 함수포인터로 본다.

엄연히 말하면 가상함수는 부모클래스의 함수를 자식클래스의 함수가 대신 실행하는거로 쫌 다른 느낌이긴 함.

람다 캡쳐라는 것은 외부의 값을 받아오는 것을 말함.

람다를 만드는 순간 외부의 값들을 어떻게 받아올 것인가.

= 은 복사를 하겠다.

&레퍼런스로 받아오겠다.

근데 전역함수는 복사되지 않는다.

지역변수는 파괴될 변수이기 때문에 람다에서 사용할 때 복사해서 만든다. 아래 코드에서 람다 안에있는 Value와 그 밖에 있는 Value의 주솟값이 다르다. 그래서 값을 바꾸는 것이 의미가 없기 떄문에 컴파일러가 안되게 막는다. const int로 받아버림

// 지역변수
int Value = 30;

FunctionPtr = [=]()
{
		Value;
};

전역변수는 복사본을 사용하지 않고 그대로 가져다가 사용한다. 주솟값 같음. 그래서 값 변경도 가능하다.

람다캡쳐 표현식에 아무것도 없으면 “내부의 구성만으로 만들겠다. 외부 지역변수들 금지. (전역변수는 걍 쓰면 됨)

지역변수 가리키는 포인터 사용도 위험하다. 파괴된 위치의 주소를 사용하려는 것임.

[&] : 외부의 변수를 레퍼런스로 받는다.

[ ]안에 변수를 아예 명시할 수도 있음.

int Test1 = 0;
int Test2 = 10;

FunctionPtr = [Test1, &Test2]()
{

};

클래스 내에서는 this도 넘겨줄 수 있음. 멤버변수는 또 가능하다. 주소값 같은 애 씀.

class MyClass
{
public:
	int Value;
	
	std::function<void()> MemberPtr = nullptr;
	
	void Test()
	{
		MemberPtr = [this]()
		{
			this.Value = 20;
		}
	}

}

IMGUI

라이브러리임.

EngineEditorGUI로 사용할거임

버튼 하나 만드는 것도 일반적으로는 코드로 내가 만들려고 하면 고생스러움.

  • imgui 장점 :
    • 멀티플랫폼이다. 다렉9, 다렉11, 다렉12, 불칸 등등 가능
    • 코드량이 적다. imgui코드를 파일을 들고와서 내꺼에 그냥 집어넣어도 될만큼 적다.

깃허브 들어가서 docking 브랜치 버전으로 받기

같은이름 디버그윈도우 불가능
창 띄우려면 Begin(), End() 무조건해야함. Begin()에 이름 안넣어주면 터짐.
엔진에서 제공하는 gui창은 텍스트보여주는 디버그용 창 딱하나 만드신다고 하심.

순수가상함수 만들면 자식들 무조건 만들어야함
OnGui 순수가상함수로 만듦. 업데이트될게 없으면 디버그gui창 의미가 없으니가.

Init() 윈도우 처음 만들어질 때 실행

GERERATE_BODY 옮김 (엔진 수정사항)

Imgui로 디버깅 활용하는 인터페이스

{
	std::string Msg = std::format("PlayerPos : {}\n",GetActorLocation().ToString());
	UEngineDebugMsgWindow::PushMsg(Msg);
}

{
	std::string Msg = std::format("MousePos : {}\n",GEngine->EngineWindow.GetScreenMousePos().ToString());
	UEngineDebugMsgWindow::PushMsg(Msg);
}
profile
일단 시작해보자

0개의 댓글