현재는 30 x 20 개의 정도의 타일을 사용해서 프레임드랍이 생기지않지만 만약 맵이커져서 타일을 10000개정도 사용하면 현재 화면에 보이지않는 모든 타일을 그려줘야해서 엄청난 부하가 생길것입니다. 이를 방지하기위해서 현재 플레이어 화면에 보이는 타일만을 그려주기위해선 타일 컬링을 사용해주면됩니다.
타일 컬링
void CTile_Manager::Render_Tile_Manager(HDC hDC)
{
// for (auto& pObject : m_vecTile)
// {
// pObject->Render_GameObject(hDC);
// }
}
타일 매니저에서 갯수 제한없이 현재 타일벡터에 들어있는 모든 타일을 그리기때문에 프레임드랍이 생긴다 그렇기 때문에 이를 없애주기위해 현재 플레이어 화면에 잡혀있는 타일만 그리도록 코드를 수정해준다.
int iStartCullingX = abs((CScroll_Manager::Get_ScrollX() / TILECX));
// 인덱스 음수가 되지않지 하게위해 절대값을 구해준다 가장 왼쪽 타일은
// 스크롤 값 타일 크기로 알수있다.
int iStartCullingY = abs(CScroll_Manager::Get_ScrollY() / TILECY);
// Y도 마찬가지
int iEndCullingX = iStartCullingX + WINCX / TILECX;
int iEndCullingY = iStartCullingY + WINCY / TILECY;
// 마지막은 첫값에서 해상도를 타일로 나눈값을 더해주면된다
//타일 갯수를 딱맞추는것보단 2개정도 여유를 둬서 그려준다
for (int i = iStartCullingY ; i < iEndCullingY + 2; ++i)
{
for (int j = iStartCullingX ; j < iEndCullingX + 2 ; ++j)
{
int iIndex = j + (i * TILEX);
//인덱스를 넘어가지 않게 예외처리를 해준다
if(0 > iIndex || m_vecTile.size() <= iIndex)
continue;
m_vecTile[iIndex]->Render_GameObject(hDC);
}
}
이렇게 컬링처리를 해주면 타일의 갯수가 많아지더라도 렉이 걸리지않는다