第13回 新作プロジェクトとゲームの土台
ここからは、左右へ進み、ジャンプで足場を渡るプラットフォーマーを作ります。入力・更新・描画を分担し、独立したプロジェクトとして組み立てます。
始める前に
変数・条件・繰り返し・関数と、クラスのメンバーへのアクセスを確認してください。入力・更新・描画の順序は本文で確認します。確認したい場合は、クラスとゲームループを参照してください。
前の回の受講や完成物は必須ではありません。下の開始用プロジェクトを使い、配布済みの処理と今回追加する処理を確認してから進めます。
配布プロジェクト
第13回の開始用プロジェクトを別のフォルダへ展開し、PlatformerGame2D.sln をVisual Studio 2026で開きます。DXライブラリの設定と素材を利用して、背景とプレイヤーの静止表示を作成します。
配布ファイル一覧
| ファイル | 役割 |
|---|---|
Source/Config/ApplicationConfig.h | 画面サイズと更新間隔の設定 |
Source/main.cpp | DXライブラリの初期化と終了 |
Assets/Images | 使用する画像素材 |
Assets/Maps | 後の回で使用するマップデータ |
Assets/Sounds | 後の回で使用する音声素材 |
この回のゴール
640×480の画面に背景とプレイヤーを表示し、Escape で終了できる状態を作ります。Player クラスはこの回から用意し、次回以降に移動・重力・ジャンプを順に追加していきます。
今回のポイント
Game クラスが入力と描画の順序を統括し、Player クラスが自身の位置を保持します。ImageManager は画像の読み込みと解放を管理します。画像の幅と高さも保持し、第20回のスプライト切り出しに利用します。
本プロジェクトの入力判定メソッドは、押し続けが IsHeld()、押した瞬間が IsPressed() です。操作の種類を表す列挙型には Input::Key を使い、入力状態を Game から Player へ渡します。
シューティング教材との対応
シューティング教材の IsDown() は本教材の IsHeld() に、Input::Action は Input::Key に対応します。ほかの教材のコードを参照する場合に確認してください。
作業の準備
第13回は配布された初期状態から始めます。今回の新規ファイルは、本文を進めながら追加します。ファイルの登録方法や変更の引き継ぎ手順は、配布ファイルの手順で確認できます。
| 作業 | 対象 |
|---|---|
| 新規作成 | Source/DxGame/Rect.h、Source/DxGame/Vector2.h、Source/Platformer/Game.cpp、Source/Platformer/Game.h、Source/Platformer/ImageManager.cpp、Source/Platformer/ImageManager.h、Source/Platformer/Input.cpp、Source/Platformer/Input.h、Source/Platformer/Player.cpp、Source/Platformer/Player.h |
| 既存ファイルへ追記・編集 | Source/main.cpp |
| 重点的に実装・確認する処理 | Game::Initialize、Game::MainLoop、Game::Draw |
ヘッダーの宣言、#include、登録テーブル、エラー処理などは、最終ステップの参考実装を参照できます。重点関数は各ステップで処理の流れを確認しながら記述します。関数を変更する際は、宣言・定義・呼び出し元の整合性を保ちます。
今回は ApplicationConfig.h の起動設定を利用します。GameTuning.h は第14回で追加します。素材はプロジェクト直下の Assets/ フォルダを編集します。
第13回の目次
main.cpp におけるDXライブラリの初期化と終了処理の対応関係を正しく構築し、RAIIを用いてリソース解放の順序を安全に制御します。3 / 4画像リソース管理と解像度情報の保持画像ハンドルとファイルパスを ImageManager に集約し、スプライトシート切り出しを見据えて元画像の寸法(幅・高さ)を合わせて保持する設計を学びます。4 / 4背景とプレイヤーを表示するGameが入力を確認し、背景とプレイヤーを繰り返し描画します。動作確認
- 背景の手前にプレイヤーが表示される
- Escape でゲームが正常に終了する
- 入力、描画、画面反転、待機の処理順序を説明できる
次回は、このPlayerに左右移動と、表示範囲・命中範囲を加えます。