WinApi 4
-
UI, 특히 버튼의 경우 비슷한 동작을 하는 객체가 여러 개 생성된다. 객체지향의 활용과 다양성을 생각했을 때는 당연히 객체마다 하나의 클래스로 정의되어 사용하는 것이 바람직하다. 하지만 이 경우 자칫하면 너무 많은 클래스들이 남발될 수 있다. 때문에 버튼 UI의 경우에는 특별한 기능을 하나 추가해보려 한다. 바로 해당 버튼이 눌렸을 때 수행 되어야 할 기능을 미리 함수로 정해두고 함수 포인터를 사용해서 함수 포인터에 특정 함수의 주소가 들어있으면, 버튼 UI는 클릭시 그 함수를 실행해주기만 하도록 처리하는 것이다. 이렇게 하면 특별한 예외 상황을 제외하면 같은 클래스를 가지고 여러 기능을 수행하는 버튼을 만들 수 있게 된다. 완성된 UI를 사용할 때는 Level에서 해당 버튼이 눌렸을 때 수행되고 싶은..
-
작업내용 - 애니메이션 역재생 기능 추가 기존에 작업해두었던 애니메이션 기능을 정해진 프레임 순서대로만 출력하는 것이 아니라 반대로도 출력가능하도록 수정하였다. 기존의 애니메이션이 실행되는 방식은 각 애니메이션 사이의 구간인 Inters 인덱스 내부를 현재 프레임에서 엔드프레임까지 시작 프레임에 해당되는 인덱스 값을 빼주는 방식으로 순차적으로 작동하도록 만들었었다. 그런데 이 경우에는 무조건 값이 줄어들기만 하기 때문에 지정된 시트에서 역방향에 해당되는 재생은 불가능했다. 이를 개선하기 위해서 이번에는 Sprite의 갯수 하나를 한 Frame이라고 가정하고 순회할 Inters의 값의 절대값을 사용해 전체 프레임을 Resize해주었다. 절대값을 사용하는 이유는 인덱스를 작은쪽에서 큰 쪽을 빼도록 하면 결과..
-
작업내용 로딩된 스테이지에 충돌 처리를 하기 위해서 이동이 가능한 픽셀만 별도의 색깔로 처리한 이미지를 하나 준비하고 로딩해준다. 이어서 현재 플레이어의 위치가 지면상 유효한 곳에 있는지를 체크하기 위한 함수를 하나 만들어준다. int PlayActor::GetGroundColor(unsigned int _DefaultColor, float4 _Pos) { if (nullptr == GroundTexture) { MsgBoxAssert("땅 체크용 텍스처가 존재하지 않습니다."); } return GroundTexture->GetColor(_DefaultColor, GetPos() + _Pos); } 이동 가능 여부는 픽셀의 색깔로 구분하려 하므로 함수 내부에 지정된 이미지 속 특정 픽셀의 색깔을 얻어오..
-
오늘 작업한 내용 ※ 첫 번째 문제 발생 : 소멸자 가상화를 사용하지 않아 발생한 메모리 누수 프로젝트 작업 중 Actor를 상속받는 배경 클래스에서 클래스를 초기화하기 위해 파일 이름을 담은 string 포인터를 사용하면 릭이 남는 현상을 발견했다. 결론적으로 소멸자를 가상화함으로서 string의 소멸자가 호출되지 않아 릭이 남는 문제를 해결했다. 그걸 알아내기 까지 문제를 분석하면서 이것저것 시도해보았다. 아래는 문제를 찾으면서 되짚어본 메모리 누수 관련 주의점이다. - Leak Check시 주의할 점 1. 당연하게도 Leak Check를 실행한 이후 시점에서 New로 동적할당된 메모리는 체크 대상이 아니므로 릭이 발생해도 잡히지 않는다. 2. 프로그램 종료시점에 잡히지 않아서 직접 정리해야되는 메모..