さて、XNA をベースに独自のゲーム エンジンを作成することになりました。完全なエンジンを作成するには、他に何が必要かを考えているところです。
これはエンジンにあるものです:
- 物理学 (Farseer Physics)
- パーティクル エンジン (マーキュリー プロジェクト)
- 2D カメラ
- 入力処理
- 画面管理(メニュー、ポーズ画面など)
- スプライト (アニメーション、スプライト シート)
- そして、Sound のような XNA のもの。
ゲーム エンジンにとって重要な何かが欠けていますか?
あなたは逆さまにそれに近づいています。
エンジンには次のものが必要です。
最初のゲームと 2 番目のゲームで共通であることが判明したすべてのコード。
まず、ゲームを書きます。エンジンを作成しないでください。エンジンに何を含めるべきか、またはどのように設計する必要があるかがわからないためです。代わりにゲームを書きます。
そのゲームができたら、別のゲームを書きます。次に、それが完了したら、2 番目のゲームのコードを調べます。最初のゲームからどれくらい再利用されましたか?
再利用されたものはすべて、別のプロジェクトにリファクタリングする必要があります。そのプロジェクトがゲーム エンジンになります。
これは、計画を立てるべきではない、または優れたコードを作成しようとするべきではないという意味ではありません。しかし、何か具体的なもの、つまり良い実装と悪い実装を見分けることができるものに向かって作業していることを確認してください。ゲームの優れた実装とは、機能し、楽しく、クラッシュしないものです。最初にこれらのことを達成するためのコードを書きます。
エンジンの適切な実装?それはもっとトリッキーです。レンダラーの適切な実装とは? AIフレームワークの?粒子系の?最終的に、エンジンが優れているかどうかを判断する唯一の方法は、実際のゲームでそのエンジンがどれだけうまく機能するかを確認することです。したがって、ゲームがなければ、エンジンを評価する方法はありません。また、エンジンを評価する方法がなければ、作成しているコードが実際に役立つかどうかを判断する方法もありません。
エンジンのテーマまたは市場。基本的なグラフィック エンジン以外のことをしている場合は、RPG、戦略、パズル、プラットフォーマー、アクション、または FPS (OK、FPS ではない) など、エンジンの市場に集中する必要があります。
これは、私たちに尋ねることなく、エンジンをさらに強化するために必要な方向性を示すのに役立ちます。Unreal Engine のようなエンジンは、複数のことを実行できますが、最も効果的なのは、そのエンジンが FPS ゲーム向けに作成されたものです。同様に、特定の関心分野に適合するようにエンジンを調整する必要があります。したがって、そのタイプのゲームプレイに適しています。
ある程度一般化することはできますが、エンジンを一般化すればするほど、時間的にもスキル的にもプログラミングが難しくなります。他のプログラマーは、より具体的なプラットフォームが利用可能であれば、一般的なエンジンを選択する可能性も低くなります (それがすべてである場合を除く)。または、一般化されたエンジンを変更することは、独自のエンジンを作成するのと同じくらい難しいため、独自のエンジンを作成することもできます。
さらにいくつか:
いくつかのアイデア:
2D エンジンの一般的な要件について説明したと思います。そのリストで私が見逃す唯一のものは次のとおりです。
また、開発プロセスを容易にするために:
XNA の既存のものの上に別のレイヤーを追加することもできます。
最後に、いくつかの「ready2use」シェーダーを追加できます。廃止されたFaceWound ("Garry's Mod" 開発者) からインスピレーションを得るかもしれません。
ゲームにもよりますが、よく必要とされるもう 1 つのことは、優れたネットワーク フレームワークです。
2D ゲームを含む最新のゲームの多くは、何らかの形でネットワークを構築しているようです。
また、いくつかのゲームを作成することも良いことです。そうすれば、各ゲームで何を繰り返すかをすばやく確認し、それをエンジンに組み込む方法を調べることができます。
ナイス ワーク、私たち (私と私の友人の何人か) も実際にゲーム エンジンに取り組んでいます。あなたが言及したものはすべて既に入手していますが、さらに以下のものがあります。
幸運を :)
3D アクセラレーションは 2D エンジンにある必要があります。
最近ほとんどの人が持っている 3D ハードウェアを使用することが、2D ゲームで驚異的なパフォーマンスを得る最良の方法です...
優れた衝突検出は非常に役立ちます。効率的に実装すると、すべてのフレームに必要な時間が大幅に短縮されます。それに加えて、私のエンジン (Pygame 用) には、メイン画面をいくつかのサブ画面に分割する方法があり、これは便利だと思います。
対象のゲーム タイプに応じて、ノードとエッジの注釈を含むナビゲーション グラフを含めます。(多くのゲームに適していますが、2D グラフィック エンジンで作成されたトークン サイド スクローラーにはあまり適していません)
これの落とし穴は、エンジンの「マップ」とは何かを定義する必要があることです。これにより、エンジンのユーザーが制限される可能性があります。
関連するもの:
シンプルなピクセルパーフェクト衝突検出。Farseer物理学ではありません。drawline、drawcircle などの単純な描画ルーチン。
タイルリピートツール。ユーザーがタイルを追加/作成し、エッジを操作して滑らかな繰り返しパターンを作成できるようにするもの。
うーん。このリストは「内部」リストです。優れたエンジンを作ることは、優れた「外部」リストを作ることです。たとえば UE3 を見てください。これは優れたツールのおかげです。世界の作成、リソースの最適なパッケージの作成(内部リストにもあるはずです;-))、衝突オブジェクトの仕様などのツールが必要です。さらに、Organiccatの回答に追加するには、技術レベルを決定する必要があります。シンプルなスプライトを使用することも、派手なエフェクトを使用することもできます (したがって、シェーダーが必要であり、これにはインフラストラクチャが必要です)。