タグ付けされた質問 「architecture」

コードの構造。ゲームエンジンの内部設計に関する質問。

3
なぜチュートリアルがOpenGLレンダリングに異なるアプローチを使用するのですか?
http://www.sdltutorials.com/sdl-opengl-tutorial-basics http://www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/ これら2つのチュートリアルは、まったく同じ結果を得るためにまったく異なるアプローチを使用しています。最初はのようなものを使用しglBegin(GL_QUADS)ます。2つ目はvertexBufferObjects、GLEWに基づいたシェーダーなどを使用します。しかし、結果は同じです。基本的な形状が得られます。 なぜこれらの違いが存在するのですか? 最初のアプローチは理解しやすいようです。複雑な2番目のアプローチの利点は何ですか?

7
ゲームコードの良い(よく整理された)例はどこで見つけることができますか?[閉まっている]
ゲームコードの良い(よく整理された)例はどこで見つけることができますか?私はいくつかの組織のヒントを拾うことができることを望んでいます。本のほとんどの例は短すぎて、簡潔にするために多くの詳細を省いています。他のプログラマーがコードのどこを見るべきかを知るために、変数とメソッドをグループ化する方法に特に興味があります。たとえば、上部の初期化子、入力を受け取るメソッド、ビューを更新するメソッドなどです。 OOPであれば、特定の言語は気にしません。Quake 2と3のソースを見ましたが、それらはまっすぐなCであり、オブジェクトの整理に関するヒントを得るのにあまり役立ちません。 それで、あなたはいくつかの良い情報源を見ましたか?「すごい、それはよく組織されている」と言わせるコードへのポインタは素晴らしいでしょう。

9
コンテンツをハードコードするのが悪いのはなぜですか?
ほとんどのゲームはダイアログテキストをファイルに保存しますが、実際にコンテンツ(マップ、選択肢、プレーヤーコマンド、ストーリーテキスト)をゲームコードにプログラムするテキストベースのゲームもいくつか見ました。 いくつかの理由が考えられますが、テキストゲームでさえプログラム外のファイルにすべてを保持する主な理由は何ですか? 実装の詳細は、一般的なXML形式のようなコンテンツを保持し、解析し、XMLファイルから作成された変数に基づいてマップを表示/表示し、XMLファイルを完全に放棄することでほとんど異なりません。これらは両方とも、画面に出力される文字列になります。違いは単なる表記ではありませんか? ゲームの中には、コード内にグラフィック(ASCIIアート?)を保持するものさえあります。私はこれが正しくないことを知っており、それが悪い理由をいくつか推測できますが、主な理由もわかりません。 ほとんどのコンテンツをプログラム外に置くことは非常に人気があります。Dwarf Fortressでさえ実際のASCII文字を使用しませんが、メモリに読み込まれたASCII文字の画像を使用します。 私が主に尋ねるのは、XMLファイルを作成、解析、および操作するのが少しPITAであるためです。ご存知のように...すべてのユニークなダンジョン(コンテンツ)を独自のクラスにするという怠zyな選択肢と比較してください。

3
複数のクラスが同じデータにアクセスする必要がある場合、データはどこで宣言する必要がありますか?
C ++で基本的な2Dタワーディフェンスゲームを持っています。 各マップは、GameStateを継承する個別のクラスです。マップは、ゲーム内の各オブジェクトにロジックと描画コードを委任し、マップパスなどのデータを設定します。擬似コードでは、ロジックセクションは次のようになります。 update(): for each creep in creeps: creep.update() for each tower in towers: tower.update() for each missile in missiles: missile.update() オブジェクト(クリープ、タワー、ミサイル)は、ポインターのベクトルに格納されます。タワーは、新しいミサイルを作成してターゲットを特定するために、クリープのベクトルとミサイルのベクトルにアクセスできる必要があります。 質問は次のとおりです。ベクトルをどこで宣言しますか?それらはMapクラスのメンバーであり、引数としてtower.update()関数に渡されるべきですか?またはグローバルに宣言されましたか?または、私が完全に欠けている他のソリューションはありますか? 複数のクラスが同じデータにアクセスする必要がある場合、データはどこで宣言する必要がありますか?

8
ゲームを開発するためにオブジェクトの継承を可能な限り使用しないでください。
Unityでゲームを開発するときは、OOP機能が好きです。通常、基本クラス(ほとんどが抽象化された)を作成し、オブジェクトの継承を使用して、同じ機能を他のさまざまなオブジェクトと共有します。 ただし、最近、継承を使用することは避けなければならず、代わりにインターフェイスを使用する必要があると誰かから聞きました。だから私は理由を尋ねて、「オブジェクトの継承はもちろん重要ですが、拡張オブジェクトがたくさんあると、クラス間の関係は深く結合されます。 私は、のようなものを抽象基底クラスを使用していますWeaponBaseし、同様に、特定の武器クラスを作成しShotgun、AssaultRifle、Machinegunそのような何か。非常に多くの利点があり、私が本当に楽しんでいるパターンの1つはポリモーフィズムです。サブクラスによって作成されたオブジェクトを基本クラスであるかのように扱うことができるため、ロジックを大幅に削減し、再利用可能にすることができます。サブクラスのフィールドまたはメソッドにアクセスする必要がある場合、サブクラスにキャストし直します。 私は、一般的に異なるクラスで使用したのと同じフィールドを定義する必要が好きではありませんAudioSource/ Rigidbody/ Animatorそして私は次のように定義されたメンバフィールドをたくさんfireRate、damage、range、spreadというように。また、場合によっては、一部のメソッドが上書きされる可能性があります。そのため、その場合は仮想メソッドを使用しているため、基本的には親クラスのメソッドを使用してそのメソッドを呼び出すことができますが、子でロジックが異なる場合は、手動でオーバーライドします。 それで、これらすべてを悪い習慣として捨てるべきですか?代わりにインターフェイスを使用する必要がありますか?

7
ゲームワールド内の大量のエンティティをシミュレートするエレガントな方法
いくつかの機能を提供する多くの(多くの)エンティティが存在するゲームがあると仮定します。それらのすべてが常に必要なわけではなく、すべてのフレームで考慮する必要もありません。この問題が存在する私が取り組んでいる具体的な問題は、臓器を含む身体の詳細なシミュレーションです。 ゲームでは、各クリーチャーはより小さな部分(胴体、脚など)に分離された自身の体を持ち、これらの部分には体の中で特定の機能を果たす器官が含まれることがあります。臓器が現在目的を果たしているかアクティブであるかは、実際には明確ではありません。結局のところ、動物には空腹がある可能性があるため、何も消化する必要はありません。各フレーム内のすべてのオブジェクトをチェックまたはシミュレートするのは非常にばかげており、世界に多くのクリーチャーがいるとすぐに非常にコストがかかります。そのため、更新が必要なオブジェクトとそうでないオブジェクトを賢く区別する方法を考えていました。 私が思いついたことは、少なくとも大丈夫なソリューションのようです。シミュレートする必要のあるオブジェクトが存在する「アテンションスタック」と呼ばれる単純なキュー/スタックを作成します(基本的に、読み取られるとすぐに各要素が削除されます。順序は無関係です)。その必要性の注目は、単にスタックに自らを置くオブジェクトまたは他のオブジェクトによってそこに置かれています。これらのオブジェクトは、おそらくsimulate()関数を備えたシンプルなインターフェースを実装するでしょう。 私の以前の消化の例に適用すると、これは次のことを意味します。 プレイヤーはインベントリから食べるもの(パンだと仮定)を選択し、キャラクターの口に入れて、口を注意スタックに置きます。次のフレームでは、スタックから口が取り出され、そのsimulate()関数が呼び出されます。口なので、ここで噛むことをシミュレートするのが妥当でしょう。これは、食べ物を飲み込む準備ができると判断するまで、口がスタックの上に置かれ続ける数フレームの間続く可能性があります。この場合、口は噛んだパンを胃に入れます(直接そこに行かないことは知っていますが、単純化のために食道は省かれています)。これも注意スタックに置かれます。次のフレームでは、消化プロセスのシミュレーションが開始されます。残りの必要な器官についても同様です。 これに関する予測可能な問題は、アイドリングオブジェクトです。眠っている動物はこの良い例です。眠っている動物をスタックに置き、毎回目を覚ます必要があるかどうかを確認することで、前述のように行うことができますが、それが唯一行われているので無駄に思えます。オブジェクトをより効率的にアイドリングするために、特定の時間に実行されるジョブを保存する一種のスケジュールを追加することを計画していました。動物が眠りにつくと、動物が眠りについた後、一定の時間だけスケジュールされる仕事をそのスケジュールに入れます。このジョブは、眠っている動物を再びアテンションスタックに配置します。ここで、注意スタックにない睡眠動物は、AIがシミュレートされていないため、何かに攻撃されるのを逃す可能性があります。 今、私は正直、これが経験不足のためにこの問題のエレガントな解決策に近いかどうかわかりません。使用可能なものに近いですか?これは通常どのように行われますか、誰かが提案やより良い解決策を持っていますか?

3
標準のC#/ Windows Formsゲームループとは何ですか?
昔ながらのWindowsフォームとSlimDXやOpenTKなどのグラフィックAPIラッパーを使用するC#でゲームを作成する場合、メインゲームループはどのように構成する必要がありますか? 正規のWindowsフォームアプリケーションには、次のようなエントリポイントがあります public static void Main () { Application.Run(new MainForm()); } そして、クラスのさまざまなイベントをフックすることで必要なものを達成することはできますがForm、それらのイベントは、ゲームロジックオブジェクトへの一定の定期的な更新を実行したり、レンダリングを開始および終了するためのコードのビットを置く明確な場所を提供しませんフレーム。 そのようなゲームは、標準に似た何かを達成するためにどのようなテクニックを使用する必要がありますか while(!done) { update(); render(); } ゲームループ、そしてパフォーマンスとGCへの影響を最小限に抑えますか?

9
スクラッチから開始-ホイールを再発明するのは間違いですか?
通常、ゲームを始めたいときはいつでも、レンダリングのための優れた基本アーキテクチャと、ゼロからのより良いゲームループがあると思います。私は通常、既存のエンジンを使用したくない。その背後にある理由は、物事を学ぶために自分で実装したいからです。 しかし、多くのブログや開発者は、車輪を再発明するのは良い選択肢ではないと言っています。 何か不足していますか?

11
ゲーム状態システムの代替手段?
私の知る限り、ほとんどのゲームには、異なるゲーム状態を切り替える「ゲーム状態システム」があります。これらは、「Intro」、「MainMenu」、「CharacterSelect」、「Loading」、「Game」などです。 一方では、これらを状態システムに分離することは完全に理にかなっています。結局のところ、それらはバラバラであり、そうでなければ、明らかに乱雑な大きなswitchステートメントである必要があります。そして、それらは確かに状態システムによってうまく表されています。しかし、同時に、「ゲーム」状態を見て、この状態システムのアプローチに何か問題があるのではないかと考えています。それは部屋の象のようなものだからです。それは巨大で明白ですが、ゲームの状態システムのアプローチに疑問を呈する人はいません。 「ゲーム」が「メインメニュー」と同じレベルに置かれているのは馬鹿げているようです。しかし、「ゲーム」状態を解除する方法はありません。 ゲーム状態システムが最善の方法ですか?「ゲームの状態」を管理するための、より良いテクニックはありますか?映画を描いてエンターをリッスンするイントロ状態、リソースマネージャーでループするローディング状態、そして実際にすべてを行うゲーム状態を持つことは大丈夫ですか?これもあなたにとっては不均衡に思えませんか?何か不足していますか?

5
コンポーネントベースのシステムでパワーアップを行う
コンポーネントベースの設計に頭を悩ませ始めたところです。これを行う「正しい」方法が何であるかはわかりません。 これがシナリオです。プレイヤーはシールドを装備できます。シールドはプレイヤーの周りにバブルとして描かれ、個別の衝突形状を持ち、プレイヤーがエリア効果から受けるダメージを減らします。 コンポーネントベースのゲームでは、このようなシールドはどのように設計されていますか? 混乱するのは、シールドに明らかに3つのコンポーネントが関連付けられていることです。 ダメージ低減/フィルタリング スプライト コライダー。 さらに悪いことに、さまざまなシールドのバリエーションがさらに多くの動作をする可能性があり、そのすべてがコンポーネントになります。 プレイヤーの最大ヘルスを向上させます 健康回復 発射体のたわみ 等 私はこれを考え直していますか?シールドは単にスーパーコンポーネントである必要がありますか? これは間違った答えだと思います。それがあなたがこれが行く方法であると思うならば、説明してください。 シールドは、プレイヤーの位置を追跡する独自のエンティティである必要がありますか? そのため、損傷フィルタリングの実装が難しくなる場合があります。また、アタッチされたコンポーネントとエンティティの間の線がぼやけます。 シールドは他のコンポーネントを収容するコンポーネントですか? 私はこのようなものを見たことも聞いたこともないが、たぶんそれは一般的であり、私はまだ十分に深くない。 シールドは、プレーヤーに追加されるコンポーネントのセットである必要がありますか? おそらく他のコンポーネントを管理するための追加のコンポーネントがあります。たとえば、それらをすべてグループとして削除できます。(誤ってダメージ軽減コンポーネントを残します。今ではそれが楽しいでしょう)。 コンポーネントの経験が豊富な人にとって明らかな何か他のものはありますか?


5
ゲームアーキテクチャ/設計の質問-グローバルインスタンスを回避しながら効率的なエンジンを構築する(C ++ゲーム)
ゲームアーキテクチャについて質問がありました。異なるコンポーネントを相互に通信させる最良の方法は何ですか? この質問がすでに何百万回も聞かれている場合、私は本当に謝罪しますが、私が探している正確な種類の情報を持つものを見つけることができません。 私はゲームをゼロから構築しようとして(重要な場合はC ++)、インスピレーションのためのいくつかのオープンソースゲームソフトウェア(Super Maryo Chronicles、OpenTTDなど)を観察しました。これらのゲームデザインの多くは、(レンダリングキュー、エンティティマネージャー、ビデオマネージャーなどのように)世界中でグローバルインスタンスやシングルトンを使用していることに気付きます。グローバルインスタンスとシングルトンを避け、可能な限り疎結合のエンジンを構築しようとしていますが、効果的な設計の経験不足に起因するいくつかの障害に直面しています。(このプロジェクトの動機の一部はこれに取り組むことです:)) GameCore他のプロジェクトで見られるグローバルインスタンスに類似したメンバーを持つメインオブジェクトを1つ持つデザインを構築しました(つまり、入力マネージャー、ビデオマネージャー、GameStageすべてのエンティティとゲームプレイを制御するオブジェクトがあります)現在読み込まれているステージなど)。問題は、すべてがGameCoreオブジェクトに集中しているため、異なるコンポーネントが互いに通信する簡単な方法がないことです。 たとえば、スーパーマリョークロニクルを見ると、ゲームのコンポーネントが別のコンポーネントと通信する必要がある場合(つまり、敵オブジェクトがレンダーキューに追加されてレンダーステージで描画される場合)は、常にグローバルインスタンス。 私は、ゲームオブジェクトに関連情報をオブジェクトに渡しGameCoreて、GameCoreオブジェクトがその情報を必要とするシステムの他のコンポーネントに渡すことができるようにする必要があります(つまり、上記の状況では、各敵オブジェクトレンダリング情報をGameStageオブジェクトに返します。オブジェクトはすべてを収集し、に返します。レンダリング情報は、レンダリングのGameCoreためにビデオマネージャーに渡されます)。これは、本当に恐ろしいデザインのように感じられ、これに対する解決策を考えていました。可能なデザインに関する私の考え: グローバルインスタンス(Super Maryo Chronicles、OpenTTDなどの設計) GameCoreオブジェクトを、すべてのオブジェクトが通信する仲介者として機能させる(上記の現在の設計) コンポーネントと通信する必要がある他のすべてのコンポーネントへのポインターを指定します(つまり、上記のMaryoの例では、敵のクラスは通信する必要があるビデオオブジェクトへのポインターを持ちます) ゲームをサブシステムに分割する-たとえば、サブシステム内のGameCoreオブジェクト間の通信を処理するマネージャーオブジェクトをオブジェクトに含める (別のオプション? ....) 上記のオプション4が最適なソリューションであると思いますが、デザインに問題があります。おそらく、グローバルを使用するデザインを見てきました。現在の設計に存在する問題と同じ問題を、各サブシステムで複製しているように感じます。たとえば、上記のGameStageオブジェクトはこれをやや試みたGameCoreものですが、オブジェクトはまだプロセスに関与しています。 誰でもここで設計のアドバイスを提供できますか? ありがとう!
28 c++  architecture 

2
世界の歴史を手続き的に生成する方法はありますか?
ここにある図は、ある人が作成した想像上の世界の1800年の文化史を表しています。 この種のものは、世界のデザインに関する限り、ゲーム開発に強力な用途があるように思われます。 彼はこの図を手でやったようです。私が興味を持っているのは、この種のダイアグラムをプログラムで作成する方法があるかどうかを見ることです。 ランダムな値から上記のスタイルのダイアグラムを生成するタスクを課された場合、どのように対処しますか?検討する特定のデータ構造またはアルゴリズムはありますか?

3
MMOゲームで多数のピックアップを処理する方法
Minecraftのようなゲーム、または実際にピックアップを備えたMMOゲームはどのようにそれらを処理しますか? 地形を発掘するたびに、地形が3滴の「汚れ」を生成するとします。すべてのアイテムに、フレームごとに計算された回転アニメーションがあるとします。世界中のピックアップの数が非常に多くなると、それらのピックアップアイテムの多くがあなたから数年離れている可能性が高いため、特定のサーバーのクライアントのフレーム計算で無駄な大規模なオーバーヘッドになります。 だから私は、ローカルプレイヤーの近くにあるピックアップだけで「何かをする」必要があると考えましたが、それでも他のピックアップアイテムがアニメーションを開始するのに十分近いかどうかを確認する必要があるすべてのフレームを意味します。 私の実際の質問は、他のMMOがこの問題をどのように解決したかです。

3
RPGゲームで複数のストーリースレッドを処理する方法は?
複数のストーリースレッドを持つRPGゲームを設計しました。つまり、ユーザーの選択に応じて、発生する場合と発生しない場合があり、いくつかの方法で同じことを達成でき、エンディングが異なる場合があります。 私は単純な意思決定エンジンを実装しましたが、それはうまく機能しますが、1つの大きな欠陥があります。あなたが決定を下す瞬間に、ストーリーはあなたの決定によってすぐに影響を受けます。 。これは、ストーリーがツリー構造のブランチのように展開し、常に次のノードを知る必要があるためです。内部では、キューを使用して決定が実装されます。各ノードは前のノードと次のノードを認識します(または、決定ノードの場合は、ユーザー入力を待って次のノードを設定します) 複雑な決定エンジンを持つゲームをたくさん見ましたが、どのように作られているのでしょうか?物事を本当に簡単にする特別なデザインはありますか?誰かが似たようなことをして、これに取り組む方法のヒントをくれましたか? 更新1: 重要な側面は、外部コードから操作できるように、ストーリーコードを何らかの形で独立させて管理することです。これをエンジンとして使用する予定であるため、可能な選択肢も外部ファイルから取得する必要があります。コードは完全に抽象的でなければなりません。 また、私はデザインソリューション、それを行うための良い方法、他の人がそれをどのようにやったか、に興味があります。
26 architecture  rpg 

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