32

さて、XNA をベースに独自のゲーム エンジンを作成することになりました。完全なエンジンを作成するには、他に何が必要かを考えているところです。

これはエンジンにあるものです:

  • 物理学 (Farseer Physics)
  • パーティクル エンジン (マーキュリー プロジェクト)
  • 2D カメラ
  • 入力処理
  • 画面管理(メニュー、ポーズ画面など)
  • スプライト (アニメーション、スプライト シート)
  • そして、Sound のような XNA のもの。

ゲーム エンジンにとって重要な何かが欠けていますか?

4

16 に答える 16

59

あなたは逆さまにそれに近づいています。

エンジンには次のものが必要です。

最初のゲームと 2 番目のゲームで共通であることが判明したすべてのコード。

まず、ゲームを書きます。エンジンを作成しないでください。エンジンに何を含めるべきか、またはどのように設計する必要があるかがわからないためです。代わりにゲームを書きます。

そのゲームができたら、別のゲームを書きます。次に、それが完了したら、2 番目のゲームのコードを調べます。最初のゲームからどれくらい再利用されましたか?

再利用されたものはすべて、別のプロジェクトにリファクタリングする必要があります。そのプロジェクトがゲーム エンジンになります。

これは、計画を立てるべきではない、または優れたコードを作成しようとするべきではないという意味ではありません。しかし、何か具体的なもの、つまり良い実装と悪い実装を見分けることができるものに向かって作業していることを確認してください。ゲームの優れた実装とは、機能し、楽しく、クラッシュしないものです。最初にこれらのことを達成するためのコードを書きます。

エンジンの適切な実装?それはもっとトリッキーです。レンダラーの適切な実装とは? AIフレームワークの?粒子系の?最終的に、エンジンが優れているかどうかを判断する唯一の方法は、実際のゲームでそのエンジンがどれだけうまく機能するかを確認することです。したがって、ゲームがなければ、エンジンを評価する方法はありません。また、エンジンを評価する方法がなければ、作成しているコードが実際に役立つかどうかを判断する方法もありません。

于 2009-05-03T13:44:53.093 に答える
20

エンジンのテーマまたは市場。基本的なグラフィック エンジン以外のことをしている場合は、RPG、戦略、パズル、プラットフォーマー、アクション、または FPS (OK、FPS ではない) など、エンジンの市場に集中する必要があります。

これは、私たちに尋ねることなく、エンジンをさらに強化するために必要な方向性を示すのに役立ちます。Unreal Engine のようなエンジンは、複数のことを実行できますが、最も効果的なのは、そのエンジンが FPS ゲーム向けに作成されたものです。同様に、特定の関心分野に適合するようにエンジンを調整する必要があります。したがって、そのタイプのゲームプレイに適しています。

ある程度一般化することはできますが、エンジンを一般化すればするほど、時間的にもスキル的にもプログラミングが難しくなります。他のプログラマーは、より具体的なプラットフォームが利用可能であれば、一般的なエンジンを選択する可能性も低くなります (それがすべてである場合を除く)。または、一般化されたエンジンを変更することは、独自のエンジンを作成するのと同じくらい難しいため、独自のエンジンを作成することもできます。

于 2009-04-13T14:36:19.877 に答える
12

さらにいくつか:

  • パスファインディング-AIに非常に役立ちます
  • AI(おそらく)は、エンジンをどれだけ一般的にしたいかによって異なります。
  • 高得点
  • リプレイ-実際に見ることができるので、ハイスコアをはるかに面白くします。
于 2009-04-13T14:26:43.813 に答える
7

いくつかのアイデア:

于 2009-04-13T14:07:13.953 に答える
6

2D エンジンの一般的な要件について説明したと思います。そのリストで私が見逃す唯一のものは次のとおりです。

  • GUI ライブラリ

また、開発プロセスを容易にするために:

XNA の既存のものの上に別のレイヤーを追加することもできます。

  • 非常に必要最小限のネットワーク/ロビーの実装
  • 複数のコントローラーのより抽象的な処理 (Resident Evil 5 Coop を参照のように、ゲーム セッション中のドロップイン/ドロップアウト) - おそらくイベントベース

最後に、いくつかの「ready2use」シェーダーを追加できます。廃止されたFaceWound ("Garry's Mod" 開発者) からインスピレーションを得るかもしれません。

于 2009-04-13T15:01:38.567 に答える
3

ゲームにもよりますが、よく必要とされるもう 1 つのことは、優れたネットワーク フレームワークです。

2D ゲームを含む最新のゲームの多くは、何らかの形でネットワークを構築しているようです。

于 2009-04-13T15:01:11.890 に答える
2
  • あなたが言うことができるようにアニメーションフレームワーク:このスプライトを取り、この方向に動かし、この速度、加速などを使用してこのパスをたどります
  • 基本的なGUIシステム。Windows全体を実装するのではなく、ポインタやボタンなどの基本的なものを実装します-基本的なものにします
  • FPS、スプライトの数などを表示するためのデバッグコンポーネント

また、いくつかのゲームを作成することも良いことです。そうすれば、各ゲームで何を繰り返すかをすばやく確認し、それをエンジンに組み込む方法を調べることができます。

于 2009-04-13T14:28:47.303 に答える
2

ナイス ワーク、私たち (私と私の友人の何人か) も実際にゲーム エンジンに取り組んでいます。あなたが言及したものはすべて既に入手していますが、さらに以下のものがあります。

  • audio manager : XNA でバックグラウンド ミュージックとサウンド エフェクトを処理する単純なクラス。
  • video manager : 複雑ではなく、XNA でのビデオ再生を処理する単純なクラスです。
  • 効果マネージャー: ブルーム、ぼかし、黒/白の色などを担当します。

幸運を :)

于 2013-06-03T07:36:30.710 に答える
1

3D アクセラレーションは 2D エンジンにある必要があります。

最近ほとんどの人が持っている 3D ハードウェアを使用することが、2D ゲームで驚異的なパフォーマンスを得る最良の方法です...

于 2009-04-13T13:59:57.513 に答える
1

優れた衝突検出は非常に役立ちます。効率的に実装すると、すべてのフレームに必要な時間が大幅に短縮されます。それに加えて、私のエンジン (Pygame 用) には、メイン画面をいくつかのサブ画面に分割する方法があり、これは便利だと思います。

于 2009-04-13T15:14:33.107 に答える
1

対象のゲーム タイプに応じて、ノードとエッジの注釈を含むナビゲーション グラフを含めます。(多くのゲームに適していますが、2D グラフィック エンジンで作成されたトークン サイド スクローラーにはあまり適していません)

  • それらを生成するためのコンポーネント (フラッド フィル アルゴリズムを介して)。
  • これらのグラフをトラバースするために、すべての主要な経路検索/計画アルゴリズム (A*/Dijkstra/など) を必ず含めてください。

これの落とし穴は、エンジンの「マップ」とは何かを定義する必要があることです。これにより、エンジンのユーザーが制限される可能性があります。

関連するもの:

  • ロケーションベースのトリガー (プレイヤーが目に見えないサークルに入り、何かが発生します - キュー カットシーン、待ち伏せの開始など)。トリガーの基本クラスを提供し、それがどのように行われるかを示すためにいくつかの基本的なクラスを実装します (つまり、武器のピックアップなど)。
  • 一部のゲーム エンジンはネットワークを実装しています (ただし、これは「xna の一部」の一部です)。
于 2009-04-13T15:24:21.740 に答える
1

シンプルなピクセルパーフェクト衝突検出。Farseer物理学ではありません。drawline、drawcircle などの単純な描画ルーチン。

于 2009-04-15T11:42:55.267 に答える
0

タイルリピートツール。ユーザーがタイルを追加/作成し、エッジを操作して滑らかな繰り返しパターンを作成できるようにするもの。

于 2009-04-13T15:00:54.183 に答える
0

うーん。このリストは「内部」リストです。優れたエンジンを作ることは、優れた「外部」リストを作ることです。たとえば UE3 を見てください。これは優れたツールのおかげです。世界の作成、リソースの最適なパッケージの作成(内部リストにもあるはずです;-))、衝突オブジェクトの仕様などのツールが必要です。さらに、Organiccatの回答に追加するには、技術レベルを決定する必要があります。シンプルなスプライトを使用することも、派手なエフェクトを使用することもできます (したがって、シェーダーが必要であり、これにはインフラストラクチャが必要です)。

于 2009-05-03T13:26:03.620 に答える