いちばんやさしいゲームの作り方

文系の人でも、数理学がわからない人でもゲームプログラミングをマスターできるブログ

すでにソースは公開したのですが、後の人が参考にできるように掲載しておきます。

ちなみに UpdateGame() はゲームの計算処理。 DrawGame() はゲームの描画処理です。お好みで読み替えてください。

// メッセージループ
MSG msg;
::ZeroMemory(&msg, sizeof(MSG));

FLOAT const frame = 16.6666f;
DWORD enterTime = ::timeGetTime();
DWORD previousTime = ::timeGetTime();
DWORD afterGameUpdateTime = ::timeGetTime();

while (msg.message != WM_QUIT) {

  if (::PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {

    ::TranslateMessage(&msg);
    // メッセージをウィンドウプロシージャに送信

    ::DispatchMessage(&msg);

  } else {

    // ゲームシステムのメインループ
    enterTime = ::timeGetTime();
    if (frame <(enterTime - previousTime)) {
      // ゲームの中核処理は必ず実行する

      ::UpdateGame(hWnd);
      afterGameUpdateTime = ::timeGetTime();
      if ((afterGameUpdateTime - enterTime) <frame) {
        // 同じフレーム内に UpdateGame() がすんだ場合は
        // 描画処理を実行する

        ::InvalidateRect(hWnd, NULL, TRUE);
        ::UpdateWindow(hWnd);
        previousTime = ::timeGetTime();
        ::Sleep(1);           // 少し待つ
      } else {
        // 次のフレームに食い込んでしまった場合は
        // 強制的に次フレームの更新を実行する
        previousTime = enterTime - (DWORD)frame;
      }
    }

  }

}

よく見るとここだけポリシーが違うんですよね。 const で定数を作っていたり。なんというかモダンな書き方に違和感がある私は古い人間なのかもしれません。

こちらにさらに新しい情報があります!

Contributions




Trackback URL

メルマガ登録・解除
 
挫折不可能!初級ゲームプログラミング完全マニュアル
RSS track feedいちばんやさしいゲームの作り方 カウンター
ブログSEO対策:track word あわせて読みたい SEO STATUS