typedef int(FuncType) (int a, int b); C++ 문법
using FUNC_TYPE = int(int a, int b); C++11 문법 (int 두개를 받고 int 반환)
버튼 마다 해야하는 기능들이 다 다르다.
그래서 ButtonUI를 부모 클래스로 만들고 이들을 상속받는 Button클래스들을 만들어 보도록 하자.
=> 이유는 다형성 문제에서 클래스가 너무 많이 만들어 질 수 있기 때문이다.
그래서 부모 버튼 UI클래스는 함수 포인터를 가지고 있도록 하자.
함수 포인터를 정의를 해놓고
f_btnFunc라는 이름으로 함수 포인터를 멤버로 들고 있도록 하자.
그리고 버튼을 클릭했을 때의 Call해줄 함수를 구현을 해놓도록 하자.
이렇게 하면은 이제 SetClickedCallBack함수의 인자로 들어 오는 녀석은
BTN_FUNC 타입의 함수이여야 한다는 것이다.
BTN_TYPE의 함수의 모양은 DWORD_PTR인자를 두개를 받고 반환 타입이 void 인 함수이여야 한다는 것이다.
지금 형태가 이런데 BTN_TYPE의 모양이 인자를 두개를 받기 때문에
이렇게 변경해주도록 하고
사용할 때는 ToolScene에서 buttonUI 만든 다음에 함수 전달해주고 인자로 들어갈 값 넣어주면은 된다.
버튼 클릭시 ToolScene -> StartScene 이동하고 싶다라고 하면은
일단 형태만 맞추기 위한 DWORD_PTR값 넣어주고 (임시변수 -> 바로삭제)
이렇게만 해주면 바로 씬이 다음 프레임에서 변경이 될 것이다.
현재 부모 클래스 UI에서 MouseLbtnClick 함수 virtual로 만들고 update에서 이벤트 체크 다 해주었는데
정작 같은 이름으로 buttonUI에서 override 하지 않아서 발생한 문제이다.
이전에 내가 계속 여기서 에러가 나서 해당 부분에다가 이렇게 Vector2 0.00..1 값을 더했는데
이전에 보고 있던 카메라 좌표랑 현재 좌표랑 완벽하게 일치할 경우
이동방향이라는 게 존재 할 수 없다.
그래서 Vector2 함수 IsZero만들어 준다음에
이렇게 변경 해주도록 하자.
현재 StartScene이랑 ToolScene왔다리 갔다리 거리면 계속 UI들이 복사가 일어남.
=> 복사가 아니라 그냥 Enter함수를 제대로 수행했을 뿐이다.
Exit에서 정리를 해주어야한다.
지금 이까지는 맞다. => 나도 코드 호출 흐름은 파악을 했음.
그런데 원인을 강사님처럼 찾지는 못할거같다.
이거 문제가 모든 오브젝트 싹다 삭제를 하는데 UI 포함.
날라간 UI를 Target으로 StartScene에서도 보고 있기 때문에 발생하는 문제이다.
그래서 이벤트를 ChangeScene으로 발생시켰을 때
다음 프레임이 수행되기 전에
여기서 nullptr로 밀어주도록 하자.
굿.
clone한 ui에 대해서만 콜백함수를 등록해주고 싶다면은
내가 지금 구현이 어떻게 되어 있는지 알고 있기 때문에
120번째 줄 처럼 dynamic_cast를 통해 ButtonUI로 다운 캐스팅을 통해서 함수포인터를 연결해 줄 수 있다.
=> cloneUI만 버튼 클릭이 잘 동작한다.
굿.