안녕하세요? floyd 이은석입니다.
임시 버퍼를 사용한 빠른 맵 출력 예제입니다. 제가 별도로 제작하고 있던 게임에
서 이것저것 빼와서 대충만든거지만... 대충 갖추어야 할 구조는 다 갖추고
있습니다.
일단 사용법을 알려드리자면 스타크래프트나.. 다른 전략시뮬처럼 마우스로 화면 
가장자리로 이동하면 맵이 이동되고 왼쪽 아래 보시면 미니맵이 있는데 그곳을
찍거나 찍은후 이동하시면 원하는 이치로 이동됩니다.
맵출력 예제이기 때문에 다른 기능은 없구... 미니맵도 단지 현재 화면상의 위치만
표시되고 다른 기능은 없습니다. (미니맵 그림도 당연히 안그리구요..)
종료는 ALT-F4를 누르시면 되고요..
아참.. 그리고.. 임시버퍼 사용의 경우 10dot단위로 스크롤 되지만 임시버퍼를
사용하지 않은 경우에는 타일 단위로 스크롤 하도록 해놓았습니다.
이유는 임시버퍼 사용의 경우 dot단위 스크롤 구현이 쉬운데 반해 사용하지 않은경우
출력처리부분에서 좀까다롭고 오버헤드가 많이 생기기 때문에 그냥 타일 단위로
해놓았습니다.
사용된 맵 스펙을 알려드리자면..
일단 타일 하나 크기는 40x40이고.. 타일세트 한장의 크기는 640x640, 그러니까
16x16개의 타일이 타일셋 한장에 틀어있습니다.
맵의 크기는 60x60이고요. (타일크기 기준) 화면 해상도는 800*600 고정입니다.
MFC 베이스로 만들었고 directx 3.0이상이면 아마 잘 돌아갈겁니다.
일단 임시버퍼를 사용한것과 사용하지 않은걸 비교해 보시려면
CMainFrame::UpdateFrame()부분을 살펴보시기 바랍니다. 제가 주석을 달아놨으니
적당히 주석처리하셔서 돌리시면 될겁니다.
임시버퍼를 사용한 맵그리기는 CAMMap::SetViewPosition() 하신 다음 
CAMMap::DrawMap()을 호출하시면 되고..
임시버퍼를 사용하지 않은 맵그리기는 CAMMap::DrawMap2()만을 호출하시면 됩니다.
그리고 임시버퍼를 사용한 것과 사용하지 않은것의 비교를 위해 타일을 비디오
메모리가 아닌 시스템 메모리에 로드하게 만들어놓았는데 요걸 바꾸시려면
STileSet::LoadTile()을 보시면 됩니다.
그리고.. 혹시나 윈도우 모드로 돌려보고 싶으신 분은 CMainFrame::OnCreate()에서
g_DXDraw.SetDisplayMode(&displayMode, TRUE);
를
g_DXDraw.SetDisplayMode(&displayMode, FALSE);
로 바꿔주시면 됩니다.
임시버퍼에 대한 설명은 사정상 생략합니다.
그럼..



