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

注意

このトピックは、「DirectX チュートリアルシリーズを含む simple ユニバーサル Windows プラットフォーム (UWP) ゲームの作成」に含まれています。This topic is part of the Create a simple Universal Windows Platform (UWP) game with DirectX tutorial series. このリンクのトピックでは、系列のコンテキストを設定します。The topic at that link sets the context for the series.

サンプルゲームの基本的なフレームワークをレイアウトし、高レベルのユーザーとシステムの動作を処理するステートマシンを実装したら、サンプルゲームをゲームに変えるルールと機構を検討します。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 sample game into a game. ここでは、サンプルゲームの主要なオブジェクトの詳細と、ゲームのルールをゲームワールドとの相互作用に変換する方法について説明します。Let's look at the details of the sample game's main object, and how to translate game rules into interactions with the game world.

目標Objectives

  • 基本的な開発手法を適用して、UWP DirectX ゲームのゲームルールと機構を実装する方法について説明します。Learn how to apply basic development techniques to implement game rules and mechanics for a UWP DirectX game.

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

Simple3DGameDXサンプルゲームでは、 Simple3DGameは主要な game オブジェクトクラスです。In the Simple3DGameDX sample game, Simple3DGame is the main game object class. Simple3DGameのインスタンスは、 App:: Loadメソッドを使用して間接的に構築されます。An instance of Simple3DGame is constructed, indirectly, via the App::Load method.

Simple3DGameクラスの機能の一部を次に示します。Here are some of the features of the Simple3DGame class.

  • ゲームプレイロジックの実装が含まれます。Contains implementation of the gameplay logic.
  • これらの詳細を通知するメソッドが含まれています。Contains methods that communicate these details.
    • ゲーム状態の変更は、app framework で定義されているステートマシンに変わります。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. 詳細については、「レンダリングフレームワーク 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 the methods and data defined by this class, see The Simple3DGame class below.

ゲームを初期化して開始する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 GameMain instance is created in App::Load.

Simple3DGame型の game オブジェクトがGameMain:: GameMainコンストラクターに作成されます。The game object, of type Simple3DGame, is created in the GameMain::GameMain constructor. 次に、 GameMain:: GameMainから呼び出されるGameMain:: Simple3DGame: ::: コルーチンの実行中に、このメソッドを使用して初期化します。It's then initialized using the Simple3DGame::Initialize method during the GameMain::ConstructInBackground fire-and-forget coroutine, which is called from GameMain::GameMain.

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

サンプルゲームでは、game オブジェクトでこれらのコンポーネントを設定します。The sample game sets up these 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.

ゲームには、 — 世界、プレーヤー、障害物、ターゲット、ammo 球のすべての主要なコンポーネントのインスタンスが含まれるようになりました。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. 次に、ゲームによってどのようにレベルが構築されるかを見てみましょう。Now let's see how the game builds the levels.

ゲームレベルのビルドと読み込みBuild and load game levels

レベルの構築の多くの処理は、 Level[N].h/.cpp サンプルソリューションのGameLevelsフォルダーにあるファイルで行われます。Most of the heavy lifting for the level construction is done in the Level[N].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. 重要な点は、各レベルのコードが個別のレベル [N] オブジェクトとして実行されることです。The important thing is that the code for each level is run as a separate Level[N] object. ゲームを拡張する場合は、割り当てられた数をパラメーターとして受け取り、障害やターゲットをランダムに配置するLevel [N] オブジェクトを作成できます。If you'd like to extend the game, you can create a Level[N] 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 gameplay

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

最適なゲームは、プレーヤー入力にすぐに反応し、すぐにフィードバックを提供します。The best games react instantly to player input, and provide immediate feedback. これは、ゲームのあらゆる種類に当てはまります。これは、twitch、リアルタイムのファーストユーザーの連絡先から、よく使用されるターンベースの戦略ゲームまでです。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 メソッドThe Simple3DGame::RunGame method

ゲームレベルが進行中の場合、ゲームはDynamics状態になります。While a game level is in progress, 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状態にある場合に作業を処理します。The update loop 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()
{
    // The controller object has its own update loop.
    m_controller->Update();

    switch (m_updateState)
    {
    ...
    case UpdateEngineState::Dynamics:
        if (m_controller->IsPauseRequested())
        {
            ...
        }
        else
        {
            // When the player is playing, work is done by Simple3DGame::RunGame.
            GameState runState = m_game->RunGame();
            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.

Simple3DGame:: RunGameのゲームフローロジックを次に示します。Here's the game flow logic in Simple3DGame::RunGame.

  • メソッドは、レベルが完了するまで秒をカウントするタイマーを更新し、レベルの時間が経過したかどうかをテストします。The method updates the timer that counts down the seconds until the level is completed, and tests to see whether the level's time has expired. これは、時間が経過したときのゲームのルールの1つです — 。すべてのターゲットがショットに含まれていない場合は、ゲームを実行します。This is one of the rules of the game—when time runs out, if not all the targets have been shot, then it's game over.
  • 時間が経過した場合、メソッドはTimeexpired 切れのゲーム状態を設定し、前のコードのUpdateメソッドに戻ります。If time has run out, then the method sets the TimeExpired game state, and returns to the Update method in the previous code.
  • 時間が残っている場合は、カメラの位置の更新のために移動ルックコントローラーがポーリングされます。具体的には、カメラ平面 (プレーヤーが見ている場所) から投影された通常のビューの角度と、コントローラーが最後にポーリングされてから角度が移動した距離を更新します。If time remains, then 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 since the controller was polled last.
  • カメラは、ムーブ/ルック コントローラーから送られる新しいデータに従って更新されます。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. このサンプルゲームでは、 Simple3DGame:: UpdateDynamicsメソッドを呼び出して、発生した ammo 球の動き、柱の障害物とターゲットの動きを更新します。In this sample game, the Simple3DGame::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. 詳細については、「 game world を更新する」を参照してください。For more information, see Update the game world.
  • メソッドは、レベルが正常に完了したかどうかを確認します。The method checks to see whether 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 whether this is the last level (of 6). 最後のレベルの場合、メソッドは、" : GameComplete game state" を返します。それ以外の場合は、game state :: LevelComplete game state を返します。If it's the last level, then the method returns the GameState::GameComplete game state; otherwise, it returns the GameState::LevelComplete game state.
  • レベルが完了していない場合、メソッドはゲームの状態を "状態: アクティブ" に設定し、を返します。If the level isn't complete, then the method sets the game state to GameState::Active, and returns.

ゲームワールドを更新するUpdate the game world

このサンプルでは、ゲームの実行中に、game シーンでレンダリングされるオブジェクトを更新するために、 Simple3DGame: : UpdateDynamics メソッド ( GameMain:: Updateから呼び出される) メソッドからSimple3DGame:: メソッドが呼び出されます。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などのループは、プレーヤーの入力に関係なくゲームの世界の動きを設定するために使用される任意のメソッドを呼び出して、イマーシブゲームエクスペリエンスを作成し、そのレベルを有効にします。A loop such as UpdateDynamics calls any methods that are used to set the game world in motion, independent of the player input, to 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 dynamic world even when there's no player input. ゲームでは、swaying のような木を含むことができます。これには、線、機械の喫煙、宇宙人未開の伸縮と移動が含まれます。In your game, that could include 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.

ゲームが特に一時停止している場合を除き、ゲームループはゲームの世界を更新し続けます。ゲームロジックや物理アルゴリズムに基づいているかどうか、または単純にランダムであるかどうか。Except when the game is specifically paused, the game loop should continue updating the game world; whether that's based on game logic, physical algorithms, or whether it's just plain random.

このサンプルゲームでは、この原則をdynamicsと呼びます。この原理は、柱の ammo の台頭と動き、そして動きと動きに応じて、動きと物理的な動作を示しています。In the sample game, 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 and in motion.

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

このメソッドは、これら4つの計算のセットを扱います。This method deals with these 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.

障害物のアニメーションは、アニメーションのソースコードファイルで定義されているループ内で行われます。The animation of the obstacles takes place in a loop defined in the Animate.h/.cpp source code files. Ammo とコリジョンの動作は、コードで提供される単純化された物理アルゴリズムによって定義され、重力やマテリアルのプロパティなど、ゲーム世界のグローバル定数のセットによってパラメーター化されます。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 of the objects in the scene, and calculated any collisions, we need to use this info to draw the corresponding visual changes.

GameMain:: Updateがゲームループの現在の反復処理を完了した後、サンプルではすぐにGameRenderer:: Renderを呼び出して、更新されたオブジェクトデータを取得し、次に示すように、プレーヤーに表示する新しいシーンを生成します。After GameMain::Update has completed the current iteration of the game loop, the sample immediately calls GameRenderer::Render to take the updated object data and generate a new scene to present to the player, as shown below.

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 perform rendering.
            default:
                CoreWindow::GetForCurrentThread().Dispatcher().ProcessEvents(
                    CoreProcessEventsOption::ProcessAllIfPresent);
                // GameMain::Update calls Simple3DGame::RunGame. If game is in Dynamics
                // state, uses Simple3DGame::UpdateDynamics to update game world.
                Update();
                // Render is called immediately after the Update loop.
                m_renderer->Render();
                m_deviceResources->Present();
                m_renderNeeded = false;
            }
        }
        else
        {
            CoreWindow::GetForCurrentThread().Dispatcher().ProcessEvents(
                CoreProcessEventsOption::ProcessOneAndAllPending);
        }
    }
    m_game->OnSuspending();  // Exiting due to window close, so save state.
}

ゲームワールドのグラフィックスをレンダリングするRender the game world's graphics

ゲームのグラフィックスを頻繁に更新することをお勧めします。これは、メインのゲームループが反復処理されるのと同じくらいの頻度です。We recommend that the graphics in a game update often, ideally exactly as often as the main game loop iterates. ループが反復処理されると、ゲームの世界の状態が更新されます。プレイヤー入力はありません。As the loop iterates, the game world's state is updated, with or without player input. これにより、計算されたアニメーションと動作をスムーズに表示できます。This allows the calculated animations and behaviors to be displayed smoothly. たとえば、プレーヤーがボタンを押したときにのみ移動される、水の単純なシーンがあるとします。Imagine if we had a simple scene of water that moved only when the player pressed a button. これは現実的ではありません。優れたゲームは、常に滑らかで滑らかに見えます。That wouldn't be realistic; a good game looks smooth and fluid all the time.

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, then the game continues to update and render the results of that update. 次に調べるGameRenderer:: Renderメソッドでは、その状態の表現がレンダリングされます。The GameRenderer::Render method we examine next renders a representation of that state. これは、前のセクションで説明したように、 GameMain:: updateの呼び出しの直後に実行されます。これには、 Simple3DGame:: rungameが含まれ、状態が更新されます。This is done immediately after a call to GameMain::Update, which includes Simple3DGame::RunGame to update states, as discussed in the previous section.

GameRenderer:: Renderは、3d ワールドの投影を描画し、その上に Direct2D オーバーレイを描画します。GameRenderer::Render 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つの状態があります。ゲームでは、[ — 一時停止] メニューのビットマップを含んだゲーム情報オーバーレイと、タッチスクリーンの移動用の四角形と共に十字線を表示するゲーム情報オーバーレイが表示されます。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 crosshairs along with the rectangles for the touchscreen move-look controller. 両方の状態でスコア テキストが描画されます。The score text is drawn in both states. 詳細については、「レンダリング フレームワーク I: レンダリングの概要」を参照してください。For more information, see Rendering framework I: Intro to rendering.

GameRenderer:: Render メソッドThe 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.
            ...
            for (auto&& object : m_game->RenderObjects())
            {
                object->Render(d3dContext, m_constantBufferChangesEveryPrim.get());
            }
        }

        d3dContext->BeginEventInt(L"D2D BeginDraw", 1);
        d2dContext->BeginDraw();

        // 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);
        }

        if (m_gameInfoOverlay.Visible())
        {
            d2dContext->DrawBitmap(
                m_gameInfoOverlay.Bitmap(),
                m_gameInfoOverlayRect
                );
        }
        ...
    }
}

Simple3DGame クラスThe Simple3DGame class

これらは、 Simple3DGameクラスによって定義されるメソッドとデータメンバーです。These are the methods and data members that are defined by the Simple3DGame class.

メンバー関数Member functions

Simple3DGameによって定義されるパブリックメンバー関数には、以下のものが含まれます。Public member functions defined by Simple3DGame include the ones below.

  • 初期化します。Initialize. グローバル変数の開始値を設定し、game オブジェクトを初期化します。Sets the starting values of the global variables, and initializes the game objects. これについては、「ゲームの初期化と開始」セクションを参照してください。This is covered in the Initialize and start the game section.
  • LoadGameLoadGame. 新しいレベルを初期化し、読み込みを開始します。Initializes a new level, and starts loading it.
  • LoadLevelAsyncLoadLevelAsync. レベルを初期化してから、レンダラーで別のコルーチンを呼び出してデバイス固有のレベルリソースを読み込むコルーチン。A coroutine that initializes the level, and then invokes another coroutine 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. 非同期プログラミングに慣れていない場合は、「 C++/WinRT を使用した同時実行と非同期操作」を参照してください。If you're new to asynchronous programming, then see Concurrency and asynchronous operations with C++/WinRT.
  • FinalizeLoadLevelFinalizeLoadLevel. メイン スレッドで実行する必要があるレベル読み込みの作業を完了します。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.
  • StartLevelStartLevel. 新しいレベルのゲームプレイを開始します。Starts the gameplay for a new level.
  • PauseGamePauseGame. ゲームを一時停止します。Pauses the game.
  • RunGameRunGame. ゲーム ループの反復を実行します。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.
  • OnSuspending および OnResumingOnSuspending and OnResuming. ゲームのオーディオをそれぞれ中断/再開します。Suspend/resume the game's audio, respectively.

ここでは、プライベートメンバー関数について説明します。Here are the private member functions.

  • LoadSavedState および SaveStateLoadSavedState and SaveState. ゲームの現在の状態をそれぞれ読み込んで保存します。Load/save the current state of the game, respectively.
  • LoadhighscoresavehighscoreLoadHighScore and SaveHighScore. ゲーム間でハイスコアをそれぞれ読み込み、保存します。Load/save the high score across games, respectively.
  • InitializeAmmoInitializeAmmo. 弾として使われるそれぞれの球体の状態を各ラウンドの最初に元の状態に戻します。Resets the state of each sphere object used as ammunition back to its original state for the beginning of each round.
  • UpdateDynamicsUpdateDynamics. これは、組み込みのアニメーションルーチン、物理、およびコントロールの入力に基づいてすべてのゲームオブジェクトを更新するため、重要な方法です。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. これについては、「 game world の更新」セクションを参照してください。This is covered in the Update the game world section.

他のパブリックメソッドは、ゲームプレイやオーバーレイ固有の情報を表示するためにアプリフレームワークに返すプロパティアクセサーです。The other public methods are property accessor that return gameplay- and overlay-specific information to the app framework for display.

データ メンバーData members

これらのオブジェクトは、ゲームループの実行に応じて更新されます。These objects are updated as the game loop runs.

  • Movelookcontrollerオブジェクト。MoveLookController object. プレーヤーの入力を表します。Represents the player input. 詳細については、「コントロールの追加」を参照してください。For more information, see Adding controls.
  • GameRendererオブジェクト。GameRenderer object. すべてのデバイス固有オブジェクトとそのレンダリングを処理する Direct3D 11 レンダラーを表します。Represents a Direct3D 11 renderer, which handles all the device-specific objects and their rendering. 詳細については、「レンダリングフレームワーク I」を参照してください。For more information, see Rendering framework I.
  • Audioオブジェクト。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

実際のレンダリングエンジンについてはまだ説明してい — ません。更新されたプリミティブに対するRenderメソッドの呼び出しが画面上のピクセルにどのように表示されるかについて説明します。We have yet to talk about the actual rendering engine—how calls to the Render methods on the updated primitives get turned into pixels on your screen. これらの側面については、レンダリング — フレームワーク I: レンダリングの概要レンダリングフレームワーク II: ゲームレンダリングの概要について説明します。Those aspects are 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 see Adding controls.