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

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

12
コードが1回だけ実行されるようにするにはどうすればよいですか?
コードをトリガーする状況が複数回発生する可能性がある場合でも、一度だけ実行したいコードがあります。 たとえば、ユーザーがマウスをクリックしたときに、次のものをクリックします。 void Update() { if(mousebuttonpressed) { ClickTheThing(); // I only want this to happen on the first click, // then never again. } } ただし、このコードでは、マウスをクリックするたびにクリックされます。一度だけそれを実現するにはどうすればよいですか?

2
Unityのインスペクターでキーと値のペア(辞書など)を編集する方法は?
私が作成しているスペルシステムは、次のとおりです。 各呪文は独立したプレハブです。これには、インスペクターで変更できるいくつかのプロパティ(基本ダメージ、持続時間など)を持つスクリプトが含まれています。 ゲームロジックで使用されるコード内のすべての可能なスペルをリストするSpell列挙型があります 呪文を唱えたいとき、この呪文のプレハブを取得してインスタンス化し、その情報を読むことができる必要があります 各アクター(プレイヤーであれ、敵であれ)には、呪文の可能なアニメーションのリストが必要です。 私が実装しようとしている方法の問題は次のとおりです。 各アクターのアニメーションをリストするにはDictionary<Spell, Animation>、を使用できますが、辞書はインスペクターでサポートされていないため、複数のアクタータイプを簡単に編集することは困難です。 対応する列挙型からスペルプレハブに簡単にアクセスする方法が必要です。ここでも辞書を使用できますが、コードではなくインスペクターでプレハブのみを参照できます。つまり、この辞書を埋めることはできません スペル列挙型を対応するプレハブとアニメーションに簡単に関連付ける方法を探しています

4
MMORPGがまだ複数のサーバーを使用するのはなぜですか?
MMORPG、League of Legends、またはStarCraft 2などの一部のMOBAは、通常、サーバーの選択を強制します。通常、それらは米国、EU、およびSEAであり、MMORPGでは場所ごとに多数存在します。それは数年前に必要だったことがわかりますが、AWSや「サーバーパワー」をシームレスに拡張できる同様の製品の登場により、なぜ別のサーバーがあるのですか? 私の思考の流れは次のようなものです(スターウォーズ:旧共和国を例として):-あなたは常に1つの惑星、他の惑星から孤立した「インスタンス」にいます。-1つの惑星に人が多すぎる場合、SW:TORは世界の新しいインスタンスを作成し、そこにプレイヤーを配置します。-あなたが世界を離れる/インスタンスを切り替えると、ロード画面があります それでは、なぜこのゲームはこの惑星のインスタンスを作成できないのでしょうか。このインスタンス(およびこのインスタンスのみ)は、データベースに現在のデータを保持し、xプレーヤーを管理します。x-50プレイヤーがこのインスタンスにいるとすぐに、新しいサーバーが起動し、新しいインスタンスがそのインスタンスに出現します。50のスポットは、グループへの切り替えなどのために予約されています。 レイテンシーを低く抑えるために、3つの主要地域すべてにインスタンスが存在する可能性がありますが、140ミリ秒の遅延でライブできる場合は、SEAから他のプレイヤーとプレイすることができます(これはまだ何もありません)。 インスタンスを切り替えたり、別の世界に移動したりするたびに、現在のサーバーはすべてのデータを次のサーバーに提供し、1つの大きな集中データベースが必要ないようにします。分析目的で定期的に更新を取得するものを使用することもできます。 ログオフするか、サーバーが接続を失うと、データを保存するために最適化された大規模なデータベースにデータを転送できます。その後、インスタンスサーバーを高スループット用に最適化できます。 これが機能しない特別な理由はありますか?私が見逃している他の問題はありますか?
18 architecture  mmo 

7
PointオブジェクトとVectorオブジェクトが必要ですか?または、単にVectorオブジェクトを使用してPointを表すことは問題ありませんか?
私が友人と一緒に開発しているエンジンのコンポーネントを構築すること(学習目的)で、私はこの疑問に思いつきました。 最初は、次のようなPointコンストラクターがありました。 var Point = function( x, y ) { this.x = x; this.y = y; }; しかし、それらにいくつかのVector数学を追加し始め、Vector2dに名前を変更することにしました。 しかし、現在、行を作成するために使用される次のようないくつかの方法は(少なくとも私の意見では)少し混乱しています。 //before the renaming of Point to Vector2, the parameters were startingPoint and endingPoint Geometry.Line = function( startingVector, endingVector ) { //... }; Pointオブジェクトの特定のコンストラクターを作成する必要がありますか、またはポイントをベクトルとして定義するのに問題はありませんか? ベクトルには大きさと方向がありますが、オブジェクトの位置を表すためだけにベクトルを使用している人が非常に多いと思います。

6
Vector3はVector2を継承する必要がありますか?
私はクラスのカップル作成していますVector2(X&Y)をし、Vector3(X、Y&Z)が、私はするかどうかわかりませんVector3から継承するVector2、またはにするかどうかのメンバ変数を再実装するm_xとm_y、再び?それぞれの長所と短所は何ですか(継承と再定義)。 編集: C ++(VS2010)を使用しています。
18 c++  architecture 

3
MVC(Model-View-Controller)ゲームエンジンアーキテクチャ-はい、いいえ?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 Game Coding Completeという素晴らしい本を読んでいます。その本は、MVC(Model-View-Controller)アプローチを使用することを強く推奨しています。 ゲームアプリケーションレイヤー ゲームロジック ゲームビュー 私にとって、このアプローチはモバイルコンピュータゲームにとってはやり過ぎのように見えます。 あなたの意見はどうですか?モジュール間に余分な通信が必要になっても、このアーキテクチャを実装する価値はありますか?この設計は非常に多くのCPUパワーを消費する可能性があり、最終的には、実装されていない場合よりも結果が大幅に遅くなりますか?

5
ゲームオブジェクトはどのようにお互いを認識する必要がありますか?
ゲームオブジェクトを多形であると同時に多形ではないように整理する方法を見つけるのは難しいと思います。 例は次のとおりです。すべてのオブジェクトにupdate()とが必要であると仮定しますdraw()。そのためには、GameObjectこれら2つの仮想純粋メソッドを持つ基本クラスを定義し、ポリモーフィズムを開始させる必要があります。 class World { private: std::vector<GameObject*> objects; public: // ... update() { for (auto& o : objects) o->update(); for (auto& o : objects) o->draw(window); } }; updateメソッドは、特定のクラスオブジェクトが更新する必要がある状態を処理することになっています。事実は、各オブジェクトが周囲の世界について知る必要があるということです。例えば: 鉱山は誰かが衝突しているかどうかを知る必要があります 兵士は、他のチームの兵士が近くにいるかどうかを知る必要があります ゾンビは、半径内で最も近い脳がどこにあるかを知っている必要があります 受動的相互作用(最初の相互作用のような)の場合、衝突検出は、衝突の特定のケースで何をすべきかをオブジェクト自体に委任できると考えていましたon_collide(GameObject*)。 他のほとんどの情報(他の2つの例のように)は、updateメソッドに渡されたゲームワールドによって照会できます。現在、世界はオブジェクトのタイプに基づいてオブジェクトを区別しません(すべてのオブジェクトを単一のポリモーフィックコンテナに格納します)。したがって、実際に理想的に返さworld.entities_in(center, radius)れるのはのコンテナですGameObject*。しかしもちろん、兵士は自分のチームから他の兵士を攻撃したくはありませんし、ゾンビは他のゾンビについては言いません。そのため、動作を区別する必要があります。解決策は次のとおりです。 void TeamASoldier::update(const World& world) { auto list = world.entities_in(position, eye_sight); for (const auto& e : list) …
18 c++  architecture 

3
Entity SystemでUI / HUDをコーディングする方法は?
Adam Martin(t-machine)に触発されたEntity Systemのアイデアはすでに得ていると思います。次のプロジェクトでこれを使い始めたいです。 エンティティ、コンポーネント、システムの基本をすでに知っています。私の問題は、UI / HUDの処理方法です。たとえば、クエストウィンドウ、スキルウィンドウ、キャラクター情報ウィンドウなど。UIイベントをどのように処理しますか(ボタンを押すなど)。これらは、すべてのフレームを処理する必要がないものです。現在、UIをコーディングするためにMVCを使用していますが、Entity Systemとの互換性はないと思います。 Entity Systemはより大きなOOPに埋め込まれていることを読みました。UIがESの外にあるかどうかはわかりません。これにどのようにアプローチしますか?

1
レベルで定義されたオブジェクトの永続状態を実装するにはどうすればよいですか?
私は再接続可能な一連の相互接続されたレベルで構成される2Dメトロイドバニアを開発しています。 各レベルは、さまざまなスプライトクラスのさまざまなオブジェクト(たとえば、敵、ピックアップ、レバーなど)が生成される場所を指定したTiled TMXファイルで表されます。新しいゲームを開始するとき、保存したゲームをロードするとき、またはレベルを変更するとき、ゲームループは適切なTMXファイルを実行し、そのレベルのすべてのオブジェクトを生成します。 レベルの変更は次の方法で処理します。Playerオブジェクトがオブジェクトと交差するPortal場合、change_map()新しいマップ(交差したポータルに関連付けられたマップ)をロードし、プレーヤーを新しいマップ上の適切な位置に配置するメソッドが呼び出されます。 一部のオブジェクトには、レベルの変更とゲームの保存と終了を通じて永続的になりたい状態があります。たとえば、プレーヤーがドアのロックを解除し、ドアの状態属性が「開く」に設定されている場合、プレーヤーが戻ったときにドアが開くようにします。左または右に設定できるレバー、およびその他のさまざまなオブジェクトに似たものが必要です。さらに、プレイヤーがエリアを再訪したときに、プレイヤーが再スポーンしたくないアイテムを収集することがあります。 したがって、私の質問は、この種の永続性をどのように処理できますか? 私はPythonで働いていますが、あなたはそれから抽象化できると思います。

4
コード全体で1回限りのフラグとチェックを回避するにはどうすればよいですか?
Hearthstoneなどのカードゲームを検討してください。 多種多様なことを行う何百ものカードがあり、そのうちのいくつかは単一のカードにさえユニークです!例えば、プレイヤーのターンをわずか15秒に短縮するカード(Nozdormuと呼ばれる)があります! このようなさまざまな潜在的な効果がある場合、コード全体でマジックナンバーと1回限りのチェックを回避するにはどうすればよいですか?PlayerTurnTimeクラスの「Check_Nozdormu_In_Play」メソッドをどのように回避できますか?そして、さらに多くの効果を追加するときに、以前はサポートする必要がなかったものをサポートするためにコアシステムをリファクタリングする必要がないように、どのようにコードを編成できますか?

4
組み合わせることができる多くの異なる攻撃タイプをどのように設計できますか?
トップダウンの2Dゲームを作成しています。さまざまな種類の攻撃が必要です。The Binding of Isaacが機能するように、攻撃を非常に柔軟で組み合わせ可能にしたいと思います。ゲーム内のすべてのグッズのリストを次に示します。良い例を見つけるために、スプーンベンダーのアイテムを見てみましょう。 スプーンベンダーは、Isaacにホーミング涙を放つ能力を与えます。 「相乗効果」セクションを見ると、興味深いが直感的な効果を得るために他の収集品と組み合わせることができることがわかります。たとえば、Inner Eyeと組み合わせると、「Isaacが複数のホーミングショットを一度に発射できるようになります」。これは理にかなっています アイザックにトリプルショットを与える このようなものを設計するのに適したアーキテクチャは何ですか?これがブルートフォースソリューションです。 if not spoon bender and not the inner eye then ... if spoon bender and not the inner eye then ... if not spoon bender and the inner eye then ... if spoon bender and the inner eye then ... しかし、それは非常に早く手に負えなくなります。このようなシステムを設計するより良い方法は何ですか?

6
実際に図を使用してゲームをモデル化しますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私はほとんどUMLを意味しますが、機能するメソッドは実行可能です。だから-あなたは実際にUML /他の図や異なる方法でゲームをモデリングしていますか?私は大学でUMLを使用したモデリングについてのテーマを持っていましたが、実際のメリットよりも努力のように思えましたが、それは巨大な複雑なITシステムを作成したことがないからだと思います。だから、それは価値があり、通常はどのタイプのダイアグラム/メソッドが最適ですか? *もちろん、多くの場合、具体的な問題を解決するために具体的なツールを選択する必要がありますが、いくつかのパターンがあるかもしれません。 編集: 1つの重要なことを忘れていました- ものを実装する前または後に図を作成しますか 私が意味するのは、人が通常心を変える何かを設計して実装するか、予期しない何かが出てきて、時には大きなものを変更しなければならないときです。すでに複雑な図でそれらを行うことは、コード自体と同じように絶望的です。

4
手続き型の世界をどのように保存しますか?
私は最近、手続き型の世界を作成する方法について読んだことがあります...しかし、どうやって保存するのですか? TerrariaやMinecraftのようなゲームでは、ユーザーはランドスケープを自由に変更できますが、その世界を最初のシードから再作成することはできません。手続き型だが修正可能な世界を保存するためにどのようなテクニックが使用されていますか?

4
ゲームエンジン:スクリプティングサポートを実装するための適切なアーキテクチャ上の方法?
単純なゲームエンジン(C#で、重要な場合)を開発していますが、アーキテクチャの観点からスクリプトを実装するのに十分な方法は考えられません。 これは、戦闘用のロジックに依存しないカスタムアニメーションを使用したシンプルなターンベースの戦略です。これには、システム/低レベルのもの用のグローバルアーキテクチャレイヤーがあり、最も重要なのは、イベントマネージャーを使用して通信する2つの主要なモジュール(ロジックとゲームビューのもの)です。 そして事は、スクリプトがゲームロジックに関連するもの(ユニットパラメーターの変更など)とゲームビューに関連するものの両方に影響を与えたいと思うことです。特定のスクリプトトリガー。 (正直なところ、理想的には、スクリプトでゲームフローを制御し、コアメカニックス/グラフィックスのみをロジック/ビューに任せたいのですが、私はこれが初めてなので、今すぐにできるかどうかわかりません) 私は3つのオプションを考えてきました: スクリプトをロジックで実行するだけで、ゲームのグラフィカルな側面を知らせます。しかし、これによりロジック/ビューの区分が非常に曖昧になりますよね... スクリプトを、同じイベントマネージャーを使用して他のユーザーとイベントを交換する別のモジュールにします。しかし、これにはイベントの同期に非常に注意する必要があると思います...そして、マネージャーに膨大な種類のイベントを追加します。(それでも個人的なお気に入り) 何よりもスクリプトをモジュールにして、ロジック/ビューの機能に直接影響を与える/呼び出すことができるようにします。これにより、イベント交換スキーム全体を台無しにして、スクリプトが実際にそうすべきではない場合でも物事を壊すことを恐れて、本質的に幅広い機能が可能になります。 したがって、これらのいずれかを決定することも、スクリプトモジュールを挿入するためのより良い方法を考えることもできません...提案や有用なリンクはありますか? ありがとうございました! 質問を移行してくれてありがとう、gamedevに特化したセクションがあることを知りませんでした

1
オブジェクト指向プログラミングでデータ指向設計を適用する方法は?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 4年前に閉鎖されました。 データ指向設計(DOD)に関する多くの記事を読んで理解していますが、DODを念頭に置いてオブジェクト指向プログラミング(OOP)システムを設計することはできません。この2つを混ぜるにはどうすればよいですか?目的は、DODを舞台裏で使用しながら、素晴らしいOOPインターフェースを持つことです。 私もこれを見ましたが、あまり助けにはなりませんでした:https : //stackoverflow.com/questions/3872354/how-to-apply-dop-and-keep-a-nice-user-interface
17 c++  architecture 

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