10일차) 쿼터뷰 액션 게임 포폴


* 포폴 진행 상황
- 최적화 처리
- 타일 구조체 내 포인터 변수를 정적 변수로 수정작업(타일 저장을 위해)





* 최적화 처리 설명
- 아이디어 : 반복문을 카메라를 기준한 곳만 돌려 연산을 줄인다.

- 기존 : 모든 타일에 대해 for문

기존은 for 문에서 모든 타일(위의 녹색 상자 영역)을 검사 하였다.
때문에 렌더에 클리핑 처리를 하여도 타일의 전체 갯수가 늘어나면 연산량으로 프레임 드랍이 심각
(전체 타일 갯수 40 * 40 = 1,600개 가 넘어가면 프레임 드랍 발생)
이를 아래 방법으로 해결



- 최적화 : 카메라 영역에 대해 for문

최적화 후 for 문은 카메라 주변 영역(빨간 마름모 영역)만 검사
이 처리를 통해 맵의 총 타일의 갯수에 상관 없이 정해진 영역만을 검사하여 성능 향상
(전체 타일 갯수 500 * 500 = 250,000개 에도 60프레임 유지)
(단, 타일로드를 위한 씬 이동 시간이 엄청 오래 걸린다;;;)
>> 이 후 다른 처리 후 프레임 드랍이 발생한다면, 마름모가 아닌 카메라 사각 영역만 검사하도록 수정하여 프레임 드랍을 더 잡을 여지가 있다.(행렬 이용)



* 프레임 드랍으로 맵 사이즈를 제한 해야 하나 고민하던중에 반 친구의 아이디어를 통해 구현 !!
압도적 감사 !!







* 포인터 변수 수정 작업
- string, LPCSTR 등으로 키 값을 저장 하려 하였지만, 해당 타입들도 포인터 변수이기에 제대로 저장이 되지 않았다.
- 이를 해결하기 위해 char 배열로 키값 변수 타입을 바꾸었다
- 대입 연산자로 키값을 대입 하려 하였지만 처리가 쉽지 않아 sprintf 함수를 사용하여 해결
>> 문자열의 초기화와 할당은 왠만하면 sprintf 나 ctrcpy 를 이용하도록 하자. 시간 낭비 조심


- 포인터 변수 타입을 사용하였을 때, 프로그램을 재시작 하면 주소값이 변경되어 제대로 로드가 안되던 문제 해결
>> 이제 맵툴에 플러드필 기능을 추가 하고, 본격적으로 스테이지 맵을 만들어 보자



- 초기 타일 사이즈를 작게 한 상태에서 로드를 한 후, 타일 크기를 키우면 저장된 값들이 그대로 렌더 된다. 이집 재밌네...






댓글