일단 첨부된 파일을 VC8.0 (.net 2005) 으로 돌려보면..
MS에서 제공하는 기본 Direct Draw 구동 소스가 나옵니다.

여기있는 구동소스를 이리저리 고치고 응용하면,
그럭저럭 괜찮은 DirectDraw를 구사할수 있답니다.

일부 초보를 상대로 만들어놓은 책은..

너무 자기네가 직접 짠 소스를 (그것도 256색 컬러 그림만 불러올수 있는 ㅡㅡ..) 설명하지만
(하지만 256컬러가 나쁘단건 아닙니다. 오히려 더 좋죠..)

이 소스는 어떤 그림이든 BMP 이면 불러올수 있는 소스입니다.
대충 이 소스를 분석하는것이 좋겠지만.

아무리 봐도 모르겠다 싶으신 분들은 이 밑의 설명을 봐주십시요.
그러나.. 분명히 말하는거지만... 설명만 읽고 아.. 글쿤 하고 넘기면
내일 까먹습니다 ㅡㅡ..

이해 가는 부분을 주석 처리하고는 식이든 해서 꼭 복습 하시길...

//////////////////////////////////////////////////////////////////
일단 Visual C++ 6.0 의 file view를 보면
=========================
Source Files
- ddex3.cpp       - 윈도 생성및 DirectDraw 초기화 및 구동소스
- ddex3.rc          - 별로 필요가.. 없는.. 그냥 밑의 리소스 ico 파일뗌에...
- ddutil.cpp        - Direct Draw 에 쓰이는 주요 명령어 함수들을 정의하는 소스 (중요)
=========================
Header Files
- ddutil.h            - ddex3.cpp 에서 ddutil.cpp 함수를 불러올수 없으니
                           여기서 ddutil.cpp 함수명들을 선언한뒤 ddex3.cpp 등에서 쓴다..
                          (즉 ddutil.cpp 안의 함수를 쓰고 싶으면 cpp 파일에 ddutil.h 만 선언하면 끝)
- resource.h       - 밑의 BMP 를 쓰기위해 필요한듯.. ㅡㅡ..
=========================
Resource Files
- directx.ico        // 필요 없음..  나중에 ddex3.cpp 의 winmain 함수를 고쳐주면 끝..ㅡㅡ..
- FRNTBACK.BMP // 필요없음..
=========================
가 있습니다....

여기서 중요한건 ddex3.cpp, ddutil.cpp 와 ddutil.h 임...
나머진 빼먹어도 상관없다

ddutil.cpp 와 ddutil.h 는 파일 이름에서 말해주듯..
Direct Draw Util 이다.. 즉 Direct Draw에서 쓰이는 화면 초기화
그림 불러오기, 표면생성, 투명키 설정등의 명령 함수가 있다.

이 ddutil.cpp를 잘 조합해서 쓰는곳이 ddex3.cpp 의 UpdateFrame 함수다..
일종의 UpdateFrame 함수를 이 소스의 엔진이라 생각해도 좋다.

이 UpdateFrame 함수는...WindowProc함수의 WM_TIMER 쪽에서 정해진 시간마다 실행하지만..
프로그래밍으로 보면 WinMain 함수의 while 문을 개조 하는편이 좋다

대략
==============================================================================
 while ( !GetAsyncKeyState(VK_ESCAPE))  // 여기서 부터는.. 게임 실제 돌아가는 부분..
 {
  Sleep(1); // M$꽁수인듯.. 이러면 Direct Draw cpu 점유율이 상당히 낮아지는..
  if ( PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) )
  {
   if ( !GetMessage(&msg, NULL, 0, 0) ) return msg.wParam;

   TranslateMessage( &msg );
   DispatchMessage( &msg );
  }
  else
  {
    //  게임 구동 함수
   }
 }
==============================================================================
식으로 바꾸는게 좋다.

하지만 이래도 사실 CPU 점유율이 높은데.. 그이유는
While 문으로 계속 키입력을 체크하기 때문이다.
즉 while 을.. while(1) 로 바꾸고 따로 탈출 루트를 만들면 CPU 점유율은 거의 없다고 봐도 좋을정도로 떨어진다.

'대학생 졸업하기 전 레벨 > DirectX' 카테고리의 다른 글

D3DX 조명  (0) 2007.12.03
Direct 3D 프로그래밍 과제  (0) 2007.11.12
픽킹. Projection 변환  (0) 2007.11.11
DirectX 3D 초기 소스  (0) 2007.10.08
DirectDraw의 기본 소스  (0) 2007.09.06
역전재판 소스.... 자작  (0) 2007.09.06

+ Recent posts