メイン ゲーム オブジェクトの定義Define the main game object

サンプルのゲームの基本的なフレームワークをレイアウトし、高度なユーザーとシステムの動作を処理するステート マシンを実装したら後をルールと、ゲームにゲームのサンプルを有効にするメカニズムを確認します。Once you’ve laid out the basic framework of the sample game and implemented a state machine that handles the high-level user and system behaviors, you’ll want to examine the rules and mechanics that turn the game sample into a game. ゲームの世界との対話にゲームのルールを変換する方法と、ゲームのサンプルのメインのオブジェクトの詳細を見てみましょう。Let’s look at the details of the game sample's main object, and how to translate game rules into interactions with the game world.

注意

このサンプルの最新ゲーム コードをダウンロードしていない場合は、Direct3D ゲーム サンプルのページに移動してください。If you haven't downloaded the latest game code for this sample, go to Direct3D game sample. このサンプルは、UWP 機能のサンプルの大規模なコレクションの一部です。This sample is part of a large collection of UWP feature samples. サンプルをダウンロードする手順については、「GitHub から UWP のサンプルを取得する」をご覧ください。For instructions on how to download the sample, see Get the UWP samples from GitHub.

目標Objective

ゲームのルールおよび UWP の DirectX ゲームのメカニズムを実装する基本的な開発手法を適用する方法について説明します。Learn how to apply basic development techniques to implement game rules and mechanics for a UWP DirectX game.

メイン ゲーム オブジェクトMain game object

このサンプル ゲーム__Simple3DGame__ゲーム オブジェクトのメイン クラスです。In this sample game, Simple3DGame is the main game object class. インスタンス__Simple3DGame__でオブジェクトが構築された、 __App::Load__メソッド。An instance of Simple3DGame object is constructed in the App::Load method.

__Simple3DGame__クラス オブジェクト。The Simple3DGame class object:

  • ゲーム ロジックの実装を指定しますSpecifies implementation of the gameplay logic

  • 通信するメソッドが含まれます。Contains methods that communicate:

    • アプリケーション フレームワークで定義されているステート マシンに、ゲームの状態の変更。Changes in the game state to the state machine defined in the app framework.
    • ゲーム オブジェクト自体に、アプリから、ゲームの状態の変更。Changes in the game state from the app to the game object itself.
    • ゲームの UI (オーバーレイとヘッドアップ ディスプレイ)、アニメーション、および物理学 (dynamics) を更新するための詳細。Details for updating the game's UI (overlay and heads-up display), animations, and physics (the dynamics).

    注意

    グラフィックスの更新はによって処理される、 __GameRenderer__クラスを取得して、ゲームで使用されるグラフィックス デバイス リソースを使用するメソッドが含まれます。Updating of graphics is handled by the GameRenderer class, which contains methods to obtain and use graphics device resources used by the game. 詳細については、次を参照してくださいレンダリング framework i:。レンダリングの概要します。For more info, see Rendering framework I: Intro to rendering.

  • レベル、ゲームのセッションを定義するデータまたは高レベルでゲームを定義する方法に応じて、有効期間のコンテナーとして機能します。Serves as a container for the data that defines a game session, level, or lifetime, depending on how you define your game at a high level. この場合は、ゲームの状態データは、ゲームの有効期間はされ、ユーザーがゲームを起動するときに 1 回が初期化されます。In this case, the game state data is for the lifetime of the game, and is initialized one time when a user launches the game.

メソッドと、このクラスのオブジェクトで定義されているデータを表示するにはSimple3DGame オブジェクトします。To view methods and data defined in this class object, go to Simple3DGame object.

初期化して、ゲームを開始Initialize and start the game

プレーヤーがゲームを開始すると、ゲーム オブジェクトはその状態を初期化し、オーバーレイの作成と追加を行い、プレーヤーのパフォーマンスを追跡する変数を設定して、レベルの構築時に使うオブジェクトをインスタンス化する必要があります。When a player starts the game, the game object must initialize its state, create and add the overlay, set the variables that track the player's performance, and instantiate the objects that it will use to build the levels. このサンプルでは、これは、ときに、新しい__GameMain__でインスタンスが作成される App::Loadします。In this sample, this is done when the new GameMain instance is created in App::Load.

ゲーム オブジェクト__Simple3DGame__で作成、 __GameMain__コンス トラクター。The game object, Simple3DGame, is created in the GameMain constructor. 使用して、初期化、 Simple3DGame::Initialize メソッド中に、非同期でタスクを作成する、 __GameMain__コンス トラクター.It is then initialized using the Simple3DGame::Initialize method during the async create task in the GameMain constructor.

Simple3DGame::Initialize メソッドSimple3DGame::Initialize method

ゲームのサンプルは、ゲーム オブジェクトには、次のコンポーネントを設定します。The game sample sets up the following components in the game object:

  • 新規のオーディオ再生オブジェクトを作成します。A new audio playback object is created.
  • 一連のレベル プリミティブ、弾薬、障害物を含む、ゲームのグラフィック プリミティブの配列を作成します。Arrays for the game's graphic primitives are created, including arrays for the level primitives, ammo, and obstacles.
  • ゲーム状態データを保存する場所を作成し、Game という名前を付け、ApplicationData::Current で指定するアプリ データ設定ストレージの場所に格納します。A location for saving game state data is created, named Game, and placed in the app data settings storage location specified by ApplicationData::Current.
  • ゲーム タイマーと初期ゲーム内オーバーレイ ビットマップを作成します。A game timer and the initial in-game overlay bitmap are created.
  • 具体的なビュー パラメーターとプロジェクション パラメーター セットを使って新規のカメラを作成します。A new camera is created with a specific set of view and projection parameters.
  • プレーヤーがコントロール開始位置とカメラ位置の 1 対 1 の対応を確保されるように、入力デバイス (コントローラー) をカメラと同じ位置に上下と左右の開始位置を設定します。The input device (the controller) is set to the same starting pitch and yaw as the camera, so the player has a 1-to-1 correspondence between the starting control position and the camera position.
  • プレーヤー オブジェクトを作成し、アクティブに設定します。The player object is created and set to active. 球オブジェクトを使用して、壁や障害物をプレイヤーの近接性を検出し、カメラ immersion を壊す可能性がある位置に配置を取得することを防止します。We use a sphere object to detect the player's proximity to walls and obstacles and to keep the camera from getting placed in a position that might break immersion.
  • ゲーム ワールド プリミティブを作成します。The game world primitive is created.
  • 円筒形の障害物を作成します。The cylinder obstacles are created.
  • 標的 (Face オブジェクト) を作成し、番号を付けます。The targets (Face objects) are created and numbered.
  • 弾薬の球体を作成します。The ammo spheres are created.
  • レベルを作成します。The levels are created.
  • ハイ スコアを読み込みます。The high score is loaded.
  • 以前に保存されたゲーム状態を読み込みます。Any prior saved game state is loaded.

ゲームには既に、ワールド、プレーヤー、障害物、標的、弾薬の球体の主要コンポーネントのインスタンスが存在します。The game now has instances of all the key components: the world, the player, the obstacles, the targets, and the ammo spheres. これらの全コンポーネントの設定と個々の固有レベルに対する動作を表すレベルのインスタンスもあります。It also has instances of the levels, which represent configurations of all of the above components and their behaviors for each specific level. ゲームでどのようにレベルが構築されるのかを見てみます。Let's see how the game builds the levels.

ビルドやロード ゲーム レベルBuild and load game levels

面倒な作業のほとんどでレベルの構築が行われる、 __Level.h/.cpp__ファイルにある、 __GameLevels__サンプル ソリューションのフォルダー。Most of the heavy lifting for the level construction is done in the Level.h/.cpp files found in the GameLevels folder of the sample solution. 非常に特定の実装に焦点を当てます、ため、私たちは取り上げませんにここでします。Because it focuses on a very specific implementation, we won't be covering them here. 重要な点は、各レベルのコードがそれぞれ個別の LevelN オブジェクトとして実行されるということです。The important thing is that the code for each level is run as a separate LevelN object. ゲームを拡張したい場合は作成、レベルオブジェクトをパラメーターとして、ランダムに割り当てられた数を受け取るが、障害物とターゲットを配置します。If you'd like to extend the game, you can create a Level object that takes an assigned number as a parameter and randomly places the obstacles and targets. または、リソース ファイル、またはインターネットからレベルの構成データを読み込むことができます。Or, you can have it load level configuration data from a resource file, or even the Internet.

ゲームのプレイを定義します。Define the game play

この時点でゲームのアセンブルに必要なコンポーネントがすべて揃います。At this point, we have all the components we need to assemble the game. レベルは、プリミティブからメモリ内の構築し、プレーヤーが操作を開始する準備が整いました。The levels have been constructed in memory from the primitives, and are ready for the player to start interacting with.

とこの最高のゲームでは、プレイヤーの入力に瞬時に反応し、迅速なフィードバックを提供します。Tthe best games react instantly to player input, and provide immediate feedback. これは、twitch アクション、リアルタイムの最初のユーザー連発銃ターンに基づくよく考えられた戦略ゲームからゲームの任意の型の場合は true。This is true for any type of a game, from twitch-action, real-time First-person shooters to thoughtful, turn-based strategy games.

Simple3DGame::RunGame メソッドSimple3DGame::RunGame method

レベルを再生するときに、ゲームは、 __Dynamics__状態。When playing a level, the game is in the Dynamics state.

GameMain::Update は次のように、フレームごとに 1 回、アプリケーションの状態を更新する更新プログラムのメイン ループします。GameMain::Update is the main update loop that updates the application state once per frame as shown below. Update ループで呼び出して、 Simple3DGame::RunGame ゲームがある場合は、作業を処理するメソッドを__Dynamics__状態。In the update loop, it calls the Simple3DGame::RunGame method to handle the work if the game is in the Dynamics state.

// Updates the application state once per frame.
void GameMain::Update()
{
    m_controller->Update(); //the controller instance has its own update loop.

    switch (m_updateState)
    {
        //...

    case UpdateEngineState::Dynamics:
        if (m_controller->IsPauseRequested())
        {
            //...
        }
        else
        {
            GameState runState = m_game->RunGame(); //when playing a level, the game is in the Dynamics state. Work is handled by Simple3DGame::RunGame method.
            switch (runState)
            {
                
      //...

Simple3DGame::RunGame ゲーム ループの現在のイテレーションのゲーム プレイの現在の状態を定義するデータのセットを処理します。Simple3DGame::RunGame handles the set of data that defines the current state of the game play for the current iteration of the game loop.

ゲームのフロー ロジックで__RunGame__:Game flow logic in RunGame:

  • メソッドは、レベルが終了するまでの間、残り時間を秒数でカウント ダウンするタイマーを更新し、レベルの時間が過ぎていないかをテストします。The method updates the timer that counts down the seconds until the level is completed, and tests to see if the level's time has expired. これは、ゲームのルールの 1 つ: 時間がなくなるし、すべてのターゲットがショットされていない、ときに、ゲーム オーバーです。This is one of the rules of the game: when time runs out and all the targets have not been shot, it's game over.
  • 時間切れになると、メソッドは TimeExpired ゲーム状態を設定し、前のコードの Update メソッドに戻ります。If time has run out, the method sets the TimeExpired game state, and returns to the Update method in the previous code.
  • 時間が残っている場合は、ムーブ/ルック コントローラーがポーリングを行って、カメラ位置に更新がないかどうかを確認します。具体的には、カメラ平面 (プレーヤーが見ている面) の延長上にあるビュー法線の角度や、前回のコントローラーのポーリング時からの角度の移動距離が更新されていないかどうかを確認します。If time remains, the move-look controller is polled for an update to the camera position; specifically, an update to the angle of the view normal projecting from the camera plane (where the player is looking), and the distance that angle has moved from the previous time the controller was polled.
  • カメラは、ムーブ/ルック コントローラーから送られる新しいデータに従って更新されます。The camera is updated based on the new data from the move-look controller.
  • ダイナミクス、つまりプレーヤーのコントロールからは独立したゲーム ワールド中のオブジェクトのアニメーションや動作が更新されます。The dynamics, or the animations and behaviors of objects in the game world independent of player control, are updated. このゲームのサンプルでは、 UpdateDynamics() が起動されている、柱となる障害物のアニメーションとターゲットの動きを弾薬球の動きを更新するメソッドが呼び出されます。In this game sample, the UpdateDynamics() method is called to update the motion of the ammo spheres that have been fired, the animation of the pillar obstacles and the movement of the targets. 詳細については、次を参照してください。ゲームの世界を更新します。For more information, see Update the game world.
  • メソッドが、レベルの正常な完了に関する基準が満たされているかどうかをチェックします。The method checks to see if the criteria for the successful completion of a level have been met. 満たされていれば、レベルのスコアをファイナライズし、これが最後のレベル (全 6 レベル) であるかどうかを判断します。If so, it finalizes the score for the level and checks to see if this is the last level (of 6). 最後のレベルであれば、GameComplete ゲーム状態を返します。そうでない場合は、LevelComplete ゲーム状態を返します。If it's the last level, the method returns the GameComplete game state; otherwise, it returns the LevelComplete game state.
  • レベルが完了していない場合は、ゲーム状態を Active に設定し、戻ります。If the level isn't complete, the method sets the game state to Active and returns.

ゲームの世界を更新します。Update the game world

このサンプルでは、ゲームの実行時に、 Simple3DGame::UpdateDynamics() メソッドの呼び出し元、 Simple3DGame::RunGame メソッド (から呼び出されるか GameMain::Update) ゲームのシーンが表示されるオブジェクトを更新します。In this sample, when the game is running, the Simple3DGame::UpdateDynamics() method is called from the Simple3DGame::RunGame method (which is called from GameMain::Update) to update objects that are rendered in a game scene.

__UpdateDynamics__ループ、呼び出しでモーション、プレイヤーの入力の独立したゲームの世界を設定するために使用するメソッドは、魅力的なゲーム エクスペリエンスを作成して、レベルがアライブします。In the UpdateDynamics loop, call methods that are used to set the game world in motion, independent of the player input, create an immersive game experience and make the level come alive. グラフィックス レンダリングする必要がありますにはが含まれ、実行中のアニメーションが生きているものでは、プレイヤーの入力がない場合でもを世界を実現できるループします。This includes graphics that needs to be rendered and running animation loops to bring about a living, breathing world even when there's no player input. たとえば、岸行、機械禁煙、エイリアン モンスターの移動を拡大したりに沿って cresting ウェーブ、風にまきをツリー。For example, trees swaying in the wind, waves cresting along shore lines, machinery smoking, and alien monsters stretching and moving around. また、プレーヤーの球体とワールドの間、または弾薬、障害物、標的の間に生じる衝突を含め、物体どうしの相互作用も統合されます。It also encompasses the interaction between objects, including collisions between the player sphere and the world, or between the ammo and the obstacles and targets.

ゲームのループは常に物理アルゴリズムでは、ゲームのロジックに基づいているかどうか、または単純かどうか、ゲームの世界中の更新のゲームが具体的には一時停止を除く、ランダムなを保持します。The game loop should always keep updating the game world whether it's based on game logic, physical algorithms, or whether it's just plain random, except when the game is specifically paused.

ゲーム サンプルでは、この原理のことをダイナミクスと呼んでいます。これにより、柱の障害物の上下の動き、発砲時に見られる弾薬の球体の動きや物理的動作が統合されます。In the game sample, this principle is called dynamics, and it encompasses the rise and fall of the pillar obstacles, and the motion and physical behaviors of the ammo spheres as they are fired.

Simple3DGame::UpdateDynamics メソッドSimple3DGame::UpdateDynamics method

このメソッドは、次の 4 種類の計算を行います。This method deals with four sets of computations:

  • ワールドで発砲された弾薬の球体の位置The positions of the fired ammo spheres in the world.
  • 柱の障害物のアニメーションThe animation of the pillar obstacles.
  • プレーヤーとワールドの境界の交差部分The intersection of the player and the world boundaries.
  • 弾薬の球体と、障害物、標的、他の弾薬球体、ワールドとの衝突The collisions of the ammo spheres with the obstacles, the targets, other ammo spheres, and the world.

障害物のアニメーションは、Animate.h/.cpp で定義されたループとして実行されます。The animation of the obstacles is a loop defined in Animate.h/.cpp. 弾薬とすべての競合の動作の簡略化された物理学のアルゴリズムで定義されている、コードで指定および重力や素材のプロパティを含む、ゲームの世界のグローバル定数のセットによってパラメーター化していること。The behavior of the ammo and any collisions are defined by simplified physics algorithms, supplied in the code and parameterized by a set of global constants for the game world, including gravity and material properties. これはすべて、ゲーム ワールドの座標空間で計算されます。This is all computed in the game world coordinate space.

フローを確認してください。Review the flow

これで、シーン内のすべてのオブジェクトを更新し、すべての競合を計算しましたしたら、この情報を使用して、対応する視覚的な変更を描画する必要があります。Now that we've updated all the objects in the scene and calculated any collisions, we need to use this info to draw the corresponding visual changes.

後__GameMain::Update()__ 、現在のイテレーションが完了すると、サンプルのゲームのループでは、呼び出してすぐに__Render()__ 更新されたオブジェクト データを受け取り、として、プレーヤーに表示する新しいシーンを生成するには次に示します。After GameMain::Update() completes the current iteration of the game loop, the sample immediately calls Render() to take the updated object data and generate a new scene to present to the player, as shown here. 次に、レンダリングを見てみましょう。Next, let's take a look at the rendering.

void GameMain::Run()
{
    while (!m_windowClosed)
    {
        if (m_visible)
        {
            switch (m_updateState)
            {
            case UpdateEngineState::Deactivated:
            case UpdateEngineState::TooSmall:
                // ...
                // otherwise fall through and do normal processing to get the rendering handled.
            default:
                CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
                Update(); // GameMain::Update calls Simple3DGame::RunGame() if game is in Dynamics state, uses Simple3DGame::UpdateDynamics() to update game world.
                m_renderer->Render(); //Render() is called immediately after the Update() loop
                m_deviceResources->Present();
                m_renderNeeded = false;
            }
        }
        else
        {
            CoreWindow::GetForCurrentThread()->Dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
        }
    }
    m_game->OnSuspending();  // exiting due to window close.  Make sure to save state.
}

ゲームの世界中のグラフィックスをレンダリングします。Render the game world's graphics

ゲーム中のグラフィックスはできるだけ頻繁 (最大ではメインのゲーム ループが反復するごと) に更新することをお勧めします。We recommend that the graphics in a game update as often as possible, which, at maximum, is every time the main game loop iterates. ループが反復するごとに、プレーヤーからの入力の有無を問わず、ゲームを更新します。As the loop iterates, the game is updated, with or without player input. これにより、計算するアニメーションと動作がスムーズに表示されるようになります。This allows the animations and behaviors that are calculated to be displayed smoothly. たとえば、プレーヤーがボタンを押したときにのみ、水が流れるという単純なシーンを思い浮かべてください。Imagine if we had a simple scene of water that only moved when the player pressed a button. ひどくつまらないビジュアルになるでしょう。That would make for terribly boring visuals. 優れたゲームは、流れるような自然の動きを伴うものです。A good game looks smooth and fluid.

上記のサンプル ゲームのループを思い出してください GameMain::Runします。Recall the sample game's loop as shown above in GameMain::Run. ゲームのメイン ウィンドウが表示されていて、スナップされたり、非アクティブにされたりしなければ、ゲームはそのまま、その更新結果の更新とレンダリングを続けます。If the game's main window is visible, and isn't snapped or deactivated, the game continues to update and render the results of that update. レンダリング調べているメソッドは今すぐその状態の表示を描画します。The Render method we're examining now renders a representation of that state. 呼び出しの直後にこれは、更新が含まれていますRunGame前のセクションで説明した更新プログラムの状態にします。This is done immediately after a call to Update, which includes RunGame to update states, which was discussed in the previous section.

このメソッドではまず 3D ワールドのプロジェクションが描画され、続いてその上に Direct2D オーバーレイが描画されます。This method draws the projection of the 3D world, and then draws the Direct2D overlay on top of it. 描画が完了すると、表示用に結合されたバッファーとともに最終的なスワップ チェーンが表示されます。When completed, it presents the final swap chain with the combined buffers for display.

注意

サンプル ゲームの Direct2D のオーバーレイの 2 つの状態があります 1 つのゲームが一時停止 メニューとゲームがタッチ スクリーンの移動についての四角形と十字線を表示する 1 つのビットマップを含むゲーム情報オーバーレイが表示されます。コント ローラー。There are two states for the sample game's Direct2D overlay: one where the game displays the game info overlay that contains the bitmap for the pause menu, and one where the game displays the cross hairs along with the rectangles for the touchscreen move-look controller. 両方の状態でスコア テキストが描画されます。The score text is drawn in both states. 詳細については、次を参照してくださいレンダリング framework i:。レンダリングの概要します。For more information, see Rendering framework I: Intro to rendering.

GameRenderer::Render メソッドGameRenderer::Render method

void GameRenderer::Render()
{
    bool stereoEnabled = m_deviceResources->GetStereoState();

    auto d3dContext = m_deviceResources->GetD3DDeviceContext();
    auto d2dContext = m_deviceResources->GetD2DDeviceContext();
   
        // ...
        if (m_game != nullptr && m_gameResourcesLoaded && m_levelResourcesLoaded)
        {
            // This section is only used after the game state has been initialized and all device
            // resources needed for the game have been created and associated with the game objects.
            //...
            auto objects = m_game->RenderObjects();
            for (auto object = objects.begin(); object != objects.end(); object++)
            {
                (*object)->Render(d3dContext, m_constantBufferChangesEveryPrim.Get()); // Renders the 3D objects
            }

        //...
        d3dContext->BeginEventInt(L"D2D BeginDraw", 1);
        d2dContext->BeginDraw(); //Start drawing the overlays
        
        // To handle the swapchain being pre-rotated, set the D2D transformation to include it.
        d2dContext->SetTransform(m_deviceResources->GetOrientationTransform2D());

        if (m_game != nullptr && m_gameResourcesLoaded)
        {
            // This is only used after the game state has been initialized.
            m_gameHud->Render(m_game); // Renders number of hits, shots, and time
        }

        if (m_gameInfoOverlay->Visible())
        {
            d2dContext->DrawBitmap(     // Renders the game overlay
                m_gameInfoOverlay->Bitmap(),
                m_gameInfoOverlayRect
                );
        }
        //...
    }
}

Simple3DGame オブジェクトSimple3DGame object

これらは、メソッドとに定義されているデータ、 __Simple3DGame__オブジェクト クラス。These are the methods and data that are defined in the Simple3DGame object class.

メソッドMethods

定義された内部メソッドSimple3DGameが含まれます。The internal methods defined on Simple3DGame include:

  • 初期化:グローバル変数の開始値を設定し、ゲーム オブジェクトを初期化します。Initialize: Sets the starting values of the global variables and initializes the game objects. これについては、を初期化して、ゲームを開始セクション。This is covered in the Initialize and start the game section.
  • LoadGame:新しいレベルを初期化し、読み込みを開始します。LoadGame: Initializes a new level and starts loading it.
  • LoadLevelAsync:非同期タスクを開始 (非同期タスクを慣れていない場合を参照してください。並列パターン ライブラリ) に、レベルを初期化し、デバイスの特定レベル リソースを読み込むレンダラーの非同期タスクを呼び出します。LoadLevelAsync: Starts an async task (if you're unfamiliar with async tasks, see Parallel Patterns Library) to initialize the level and then invoke an async task on the renderer to load the device specific level resources. このメソッドは独立したスレッドで実行されます。そのため、このスレッドから呼び出すことができるのは ID3D11Device メソッドだけです (ID3D11DeviceContext メソッドは呼び出されません)。This method runs in a separate thread; as a result, only ID3D11Device methods (as opposed to ID3D11DeviceContext methods) can be called from this thread. デバイス コンテキストのメソッドは、FinalizeLoadLevel メソッドで呼び出されます。Any device context methods are called in the FinalizeLoadLevel method.
  • FinalizeLoadLevel:メイン スレッドで実行する必要があるレベル読み込みの作業を完了します。FinalizeLoadLevel: Completes any work for level loading that needs to be done on the main thread. これには、Direct3D 11 のデバイス コンテキスト (ID3D11DeviceContext) のメソッドの呼び出しが含まれます。This includes any calls to Direct3D 11 device context (ID3D11DeviceContext) methods.
  • StartLevel:新しいレベルでゲーム プレイを開始します。StartLevel: Starts the game play for a new level.
  • PauseGame:ゲームを一時停止します。PauseGame: Pauses the game.
  • RunGame:ゲーム ループの反復を実行します。RunGame: Runs an iteration of the game loop. ゲームの状態が App::Update の場合、ゲーム ループを反復するごとに Active から 1 回呼び出されます。It's called from App::Update one time every iteration of the game loop if the game state is Active.
  • OnSuspendingOnResuming:前者はゲームのオーディオを中断し、後者はこれを再開します。OnSuspending and OnResuming: Suspends and resumes the game's audio, respectively.

さらに、次のプライベート メソッドがあります。And the private methods:

  • LoadSavedStateSaveState:前者はゲームの現在の状態の読み込み、後者はこれを保存します。LoadSavedState and SaveState: Loads and saves the current state of the game, respectively.
  • SaveHighScoreLoadHighScore:前者はゲーム全体のハイ スコアを読み込み、後者はこれを保存します。SaveHighScore and LoadHighScore: Saves and loads the high score across games, respectively.
  • InitializeAmmo:弾として使われるそれぞれの球体の状態を各ラウンドの最初に元の状態に戻します。InitializeAmmo: Resets the state of each sphere object used as ammunition back to its original state for the beginning of each round.
  • UpdateDynamics:これは、アニメーションのキャンド ルーチンをはじめ、物理学とコントロール入力に基づいてゲーム オブジェクトをすべて更新するため、重要なメソッドになります。UpdateDynamics: This is an important method, because it updates all the game objects based on canned animation routines, physics, and control input. これが、ゲームを定義するインタラクティビティの中核部分に相当します。This is the heart of the interactivity that defines the game. これについては、ゲームの世界を更新セクション。This is covered in the Update the game world section.

これ以外のパブリック メソッドとして、表示用のアプリ フレームワークにゲーム プレイとオーバーレイ固有の情報を返すプロパティの getter があります。The other public methods are property getters that return game play and overlay specific information to the app framework for display.

データData

コード例の冒頭には、ゲーム ループの実行時にインスタンスが更新される 4 つのオブジェクトがあります。At the top of the code example, there are four objects whose instances are updated as the game loop runs.

  • MoveLookControllerオブジェクト。プレイヤーの入力を表します。MoveLookController object: Represents the player input. 詳細については、「コントロールの追加」を参照してください。For more information, see Adding controls.
  • GameRendererオブジェクト。派生した Direct3D 11 のレンダラーを表す、 DirectXBaseデバイスに固有のすべてのオブジェクトと、レンダリングを処理するクラスです。GameRenderer object: Represents the Direct3D 11 renderer derived from the DirectXBase class that handles all the device-specific objects and their rendering. 詳細については、次を参照してください。レンダリングのフレームワークはします。For more information, see Rendering framework I.
  • オーディオオブジェクト。ゲームのオーディオ再生を制御します。Audio object: Controls the audio playback for the game. 詳細については、次を参照してください。サウンドを追加するします。For more information, see Adding sound.

残りのゲーム変数には、プリミティブとゲーム内で対応するプリミティブの量を示すリストと、ゲーム プレイ固有のデータと制約が含まれます。The rest of the game variables contain the lists of the primitives and their respective in-game amounts, and game play specific data and constraints.

次のステップNext steps

ここまでで、興味おそらく実際のレンダリング エンジンに関する: 方法への呼び出し、__レンダリング__更新されたプリミティブをメソッドを取得、画面上のピクセルになっています。By now, you're probably curious about the actual rendering engine: how calls to the Render methods on the updated primitives get turned into pixels on your screen. これは 2 つの部分で説明—レンダリング framework i:レンダリングの概要レンダリング framework II:ゲームのレンダリングします。This is covered in two parts — Rendering framework I: Intro to rendering and Rendering framework II: Game rendering. またプレーヤー コントロールによってゲーム状態がどのように更新されるのかについては、「コントロールの追加」をご覧ください。If you're more interested in how the player controls update the game state, then check out Adding controls.