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

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

メルマガのサンプルを作っております。

かなり試行錯誤しながらゲームループを作ってみました。

主に 2D の場合のアルゴリズムなのですが、あっているか不安です。

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

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

while (msg.message != WM_QUIT) {

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

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

    ::DispatchMessage(&msg);

  } else {

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

      ::UpdateGame();
      if ((nowTime - previousTime) <(frame * 2)) {
        // 同じフレーム内に UpdateGame() がすんだ場合は
        // 描画処理を実行する

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

}

大丈夫かな?

Contributions




Trackback URL

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