レベルの実装


7

私は最近、学習目的でサイドスクローラーゲームの作成を開始しました。そのためにいくつかのレベルを作成しているときに、ゲームにこれらのレベルを実装する方法という質問に遭遇しました。メニュー状態、ゲーム状態などを備えた状態ベースのゲームを作成しました(これが一般的な方法だと思います。間違っている場合は修正してください。感謝しています)。では、ゲーム状態にさまざまなレベルを実装する一般的な方法は何でしょうか?レベルごとに新しい状態を作成する必要がありますか?または、ゲームの状態を唯一の「プレイ可能な」状態にし、現在のレベルを「知っている」(ただし、実現する)必要がありますか?ポイントカウントやそのようなもの(ライブシステム、または単純なハイスコアのポイントシステムなど)をどのように実現しますか

回答:


4

レベルの概念の実装はかなり異なりますが、2つの一般的な手法が思い浮かびます。

ほとんどのオープンゲームは、レベル/進行状況がプレーヤーの内部状態にすぎないものであり、通常の実装では、ゲームアセットがプレーヤーの状態に追いつくようにします(レベルが「ドック内」で始まる場合、ゲームが開始しますそこに置くと、ロードが開始されます。)ゲームは、すべてのアセットのロードが完了するまで待機してから、「ロード」状態に切り替えます。

他の一般的な手法は、レベルをより明確にすることです。読み込まれるレベルは、プレーヤーのセッション情報から取得されますが、レベルをゲームに読み込んでから、エンティティを開始点に配置します。これは、ゲームの舞台となる文字通りのレベルを持つゲームの標準です。これらのスタイルのゲームのセーブゲームは、レベルの開始条件との違いのみを保存する傾向があります。

ご覧のとおり、これらはどちらもレベルごとにゲーム状態がないことを意味しているわけではなく、レベルがプレーヤーのセッション情報に追いついているか、アセットがレベルに明示的に読み込まれ、プレーヤーがそのレベルに配置されていることだけです。

サイドスクローラーでは、これはレベルインデックス/ IDを含むセッション情報として取得され、そのレベルがゲームスターに読み込まれます。レベルインデックスが変更されると、あるレベルから次のレベルに移動するために必要なすべての情報を保存し、現在のレベルを解放して新しいレベルをロードし、最後に保存した状態にします。

ポイントやゲームの進行状況は通常、セッション情報によって管理されます。セッション情報には通常、現在のライフ、スコア、プレイ時間は含まれますが、レベル内の情報(健康レベル、速度、画面上の弾丸の数など)は含まれません。この分離は、レベルが常に場所にマッピングされているゲーム(たとえば、場所を再訪するゲーム)では重要ですが、線形ゲームでも思考を単純化するのに役立ちます。


2

簡単に言えば、ゲームの状態は、現在のレベルのインデックスを運ぶことができます。現在のレベルをアンロードし、現在のレベルのインデックスを更新してから、(新しい)現在のレベルをロードして再生を開始できるように、レベルが終了したときにトリガー(少なくとも関数)が必要になります。

レベルごとに別の状態を作成することもできますが、通常は不要です。「フロントエンド」と「ゲーム中」のデータの違いは、レベルの違いと同じではありません。レベルごとの状態が必要な場合は、ゲーム状態に別の状態マシンを含めることができます。その最も基本的な形式は、現在のレベルを表すインデックスです。:)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.