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

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

4
動的なゲームオブジェクトを保存する最も効率的なコンテナは何ですか?[閉まっている]
ここで何が尋ねられているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 7年前に閉鎖されました。 私は一人称シューティングゲームを作成していますが、さまざまな種類のコンテナについて知っていますが、ゲームで頻繁に追加および削除される動的オブジェクトを保存するのに最も効率的なコンテナを見つけたいと思います。元弾丸。 その場合、それはリストであるため、メモリは連続しておらず、サイズ変更が行われることはありません。しかし、その後、マップまたはセットを使用することも考えています。有益な情報があれば教えてください。 ちなみに私はこれをC ++で書いています。 また、私はうまくいくと思う解決策を思いつきました。 まず、大きなサイズのベクトルを割り当てます。たとえば、1000個のオブジェクトを割り当てます。このベクターに最後に追加されたインデックスを追跡して、オブジェクトの終わりがどこにあるかを把握します。次に、ベクターから「削除」されたすべてのオブジェクトのインデックスを保持するキューも作成します。(実際の削除は行われません。そのスロットが空いていることがわかります)。したがって、キューが空の場合、ベクトルに最後に追加されたインデックス+ 1に追加します。そうでない場合は、キューの先頭にあったベクトルのインデックスに追加します。

5
複数のフレームを完了するゲームアクション
これまでにゲームプログラミングをしたことがないのですが、かなり簡単な質問です。 メインループが次のように見えるテトリスゲームを作成しているとします。 for every frame handle input if it's time to make the current block move down a row if we can move the block move the block else remove all complete rows move rows down so there are no gaps if we can spawn a new block spawn a …

3
入力オブジェクトとゲームオブジェクトの懸念を分離しますか?
おそらくすべてのゲームで、開発者は何らかの方法で入力を処理する必要があります。それは、単純なキーボードイベントやマウスイベント、タッチイベント、または加速度計入力などです。この間接的な直接入力は、ゲーム内のオブジェクトに影響を与えます。同じ入力が異なるオブジェクトに影響する場合があります。今、私はこれをモデル化する方法について考えてきました。私がそれを見る方法には、2つの異なるアプローチがあります。 ゲームオブジェクト自体に処理させ、イベントをサブスクライブし、独自のメソッドを呼び出します。これには、ゲームオブジェクト自体が、どの入力がどのアクションを引き起こすかを決定できるという利点があります。欠点は、入力コードが「コア」ゲームオブジェクトコードで破損することです。また、ゲームオブジェクトはゲームの残りの状態を認識しないため、入力イベントに基づいて動作しない場合があります。これは正しくないようです。 一般的な入力コントローラーにすべての入力を処理させ、誰がどのイベントを処理するかを決定します。これは懸念をよりよく分離するように見えますが、入力コントローラークラスをゲームオブジェクトに緊密に結合します。誰がどのイベントをどの状態で受信したいかを知る必要があります。これも正しくないようです。 これを処理するためにどのような戦略を使用していますか?

2
コンポーネントベースシステムのオンラインリソース[終了]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 2年前に閉店しました。 私は自分のゲームでよりコンポーネントベースのアプローチに移行することを検討しています。この移行を少し簡単にするのに役立つまともな参考資料やサンプル実装は他にありますか?

4
戦う2つの軍隊の出力を計算する
Flashを使用して戦略ゲームをプログラミングしています。このゲームは、有名なゲーム「トラビアン」と非常によく似ています。 私の問題は次のとおりです。2つの軍隊の戦いの結果として失われた軍隊の計算をしようとしています。両軍は異なる種類のユニットを持っています。それらのいくつかは他のユニットに対して強く、他のタイプに対して弱いです。 戦闘の方程式にこの違いの効果をどのように置けばいいですか? それらがattとdefポイントのみを持っている場合は簡単に思えますが、ユニットタイプの依存関係になると、私は失われます。

6
2D物理エンジンを構築するにはどうすればよいですか?[閉まっている]
ここで何が尋ねられているかを伝えるのは難しいです。この質問は曖昧、曖昧、不完全、過度に広範、または修辞的であり、現在の形式では合理的に答えることができません。この質問を明確にして、再開できるようにするには、ヘルプセンターに アクセスしてください。 6年前に閉鎖されました。 私が作った最も高度なゲームは、物理エンジンBox2dFlashAS3で作られた8ボールプールゲームとレベルのあるプラットフォームゲームです。 プラットフォームゲームをするとき、エンジンを再利用できるように、エンジンの作り方を常に知りたいと思っていました。斜面、曲線の斜面、完全な重力、現実の物理学を備えたゲームを見たとき、エンジンのコーディング方法を知っていたらと思っていました。 関連する知識ベースが必要な場合は、テクニックや記事を提案してください。

4
リソースマネージャー-彼らは良いですか?
私はこのようなことをソースコードで何度も見てきました[まあ、これはもっと私の擬似C ++のアイデアです] typedef shared_ptr<Resource> ResourcePtr;// for ease ResourcePtr sound1 = resourceManager.Get<SoundResource>("boom.ogg"); sound1->Play(); ResourcePtr sprite = resourceManager.Get<Image>("sprite.png"); 私はこのようなクラスがどれほど役に立つか、ただ疑問に思っていました: ロードされたメディアファイル それらをメモリに保存しました これはレベルの開始時に行いました-ロード画面。 掃除した 次のシステムを持つのではなく: リソースはエンティティのみによって保持されているか、緩やかです。 メモリへの独自のロードを担当します。 最初は、そのような「マネージャー」です。私が感じる何かは、それが使用するのが間違っていることを示しています。ただし、ロードする必要のあるものすべてを探し回るのではなく、リソース名のベクトルのようなものを渡すことができます。

5
noSQL-Webベースのゲームの有効なオプションですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Game Development Stack Exchangeで話題になるようにします。 6年前に閉鎖されました。 機会と退屈から、友人と私はウェブベースのゲームを作ることにしました。通常、私はジャンゴでウェブアプリをプログラムするので、これは私が作る最初の「ゲーム」です。 ゲームに同じフレームワークを使用することを選択しましたが、将来の要件とDB関連の問題を予測することができないため、データストレージについては完全にはわかりません。最近、noSQLの動きが勢いを増しているので、その領域について調べたいと思います。 したがって、次の質問があります。 noSQLデータストレージ(MongoDBなどのドキュメントベース)は、Webベースのゲームに適していますか? MySQLなどの従来のRDBMSを使用して発生する可能性のある問題は何ですか? ゲームプレイ中またはcronジョブなどの定期的なイベントで、MongoDBを使用するユーザー間でデータの一貫性を保証する方法は? ゲームの概要:モンスターと戦い、アイテムなどを獲得する典型的なアドベンチャーゲーム。 アイテム、武器、ポーション、マップなど、一部のデータはすべてのプレーヤーで静的です。 プレーヤーに関連付けられたいくつかのデータ:インベントリ、メトリック(統計)、進行状況など プレイヤーは他のプレイヤーの統計と状態を知る必要があるかもしれません スケジュールされたタスクは特定の時間間隔で実行されます

3
ゲーム開発で使用されるメモリ割り当てパターン
私は独自のアロケーターメソッド(メモリプールやプロファイリングなどをサポートする)の作成を研究していますが、研究を続けるにつれて、ゲーム開発でこれがどのように行われるかを探していました。 どのようなメモリ割り当て手法を使用できますか、なぜそれが優れた手法なのでしょうか?

1
拡張可能なアセット読み込みシステムをどのように構築すればよいですか?
Javaの趣味のゲームエンジンの場合、シンプルだが柔軟なアセット/リソースマネージャーをコーディングしたいと思います。資産は、音、画像、アニメーション、モデル、テクスチャなどです。数時間のブラウジングといくつかのコードの実験の後、私はまだこのことを設計する方法がわかりません。 具体的には、特定の資産タイプがどのようにロードされ、どこから資産がロードされるかを抽象化するような方法でマネージャーを設計する方法を探しています。他のプログラムがそれについて知る必要なしに、ファイルシステムとRDBMSストレージの両方をサポートできるようにしたいと思います。同様に、XMLであるアニメーション記述アセット(FPS、レンダリングするフレーム、スプライトイメージへの参照など)を追加したいと思います。XMLファイルを見つけて読み取り、AnimationAssetその情報を持つクラスを作成して返す機能を備えたクラスを作成できるはずです。データ駆動型の設計を探しています。 私は上の多くの情報を見つけることができますどのような資産運用会社がすべきではなく、上でどのようにそれを行います。関連するジェネリックは、何らかの形のクラスのカスケード、または何らかの形のヘルパークラスをもたらすようです。しかし、個人的なハックやコンセンサスのように見えない明確な例を見たことはありません。

2
「ResourceManager」クラスが不良と見なされる場合、代替手段は何ですか?
次のような相反する意見を聞いています。 「専任のマネージャークラスはほとんど適切なエンジニアリングツールではありません」 「専用マネージャークラスは(現在)何千ものリソースを持つ大規模プロジェクトを生き残るための最良の方法です」 次の機能を持つ従来のResourceManagerクラスを見てみましょう。 アセット(テクスチャ、オーディオ、3Dモデルなど)をロードします キャッシュを保持することにより、アセットが一度だけロードされるようにします 参照は、資産を割り当て解除できるかどうかを判断するために資産をカウントします 実際の資産の出所を隠します(たとえば、資産ごとに1つのファイル、1つのパッケージファイル内のすべての資産、またはネットワークを介して資産をロードすることもできます) プログラムを再起動せずにアセットをリロードできます。これは、ゲームに取り組んでいるアーティストにとって非常に便利です。 また、これらのResourceManagerオブジェクトがシングルトンではなく、依存性注入を介して渡されるように見せることにより、テーブルから「シングルトンは悪い」引数を取りましょう。 次に、「ファクトリを使用する」または「ファクトリと呼ぶ」引数があります。これに関する私の問題は、はい、それはファクトリーですが、キャッシュとリローダーでもあるということです(より良い言葉がないため)。それをファクトリと呼ぶことはそれを適切に記述しません、そして私がそれを適切なファクトリにするならば、キャッシングとリロードはどこで実装されますか? 「マネージャー」クラスはしばしば悪いアーキテクチャの症状であることに同意しますが、この特定のケースでは、どのように再構築し、すべての機能を保持できますか?これは、「Manager」クラスが実際に適切な状況ですか?

2
衝突検出ロジックはどこに配置する必要がありますか?
私は小さな2Dゲームエンジンを開発しています。文字には、現在次のことを行うpaintメソッドがあります。 速度などに応じてキャラクターの新しい位置を計算します。 コリジョングリッドセルを更新します** 新しい位置にキャラクターを描く **交差点チェックの回数を減らすために衝突グリッドを作成しました 今、衝突を検出するために私が考えた基本的なアルゴリズムは次のとおりです。 For Each Character Check intersection with characters in surrounding 8 cells このメソッドをpaintメソッドに配置するだけです。しかし、ここに私が予想する問題があります。 2つの文字AとBが衝突グリッドの隣接するセルにあるとします。これで、上記のアルゴリズムに従って、文字Aの反復でBと衝突したことが検出されます。文字Bの反復で、文字Aと衝突したことが検出されます。 しかし、AがBと衝突したことをAが検出すると、Aと衝突したことをBに通知する必要があるという考えがあります。これにより、衝突するアクタが2人以上いる場合に多くの比較を保存できます。しかし、私はこれをどのように扱うかわかりません。すべてのキャラクターが衝突をチェックする代わりに、ゲームループ内で衝突をチェックする必要があると思います。 このアプローチは正しいでしょうか?この種の問題をどのように処理しましたか?衝突グリッドのことは自分で考えました。コリジョングリッドロジックに代わるものはありますか?


2
通常、物理学またはグラフィックスコンポーネントは、コンポーネント指向システムでどのように構築されますか?
私は最後の48時間をオブジェクトコンポーネントシステムに目を通し、それを実装する準備が十分に整ったと感じています。基本のObjectクラスとComponentクラスを作成しましたが、実際のコンポーネントの作成を開始する必要があるため、少し混乱しています。HealthComponentまたは基本的に単なるプロパティのようなものでそれらを考えるとき、それは完全に理にかなっています。物理/グラフィックコンポーネントとしてより一般的なものである場合、少し混乱します。 これまでのところ、私のオブジェクトクラスは次のようになっています(変更が必要な場合は、まだ新しいことをお知らせください)。 typedef unsigned int ID; class GameObject { public: GameObject(ID id, Ogre::String name = ""); ~GameObject(); ID &getID(); Ogre::String &getName(); virtual void update() = 0; // Component Functions void addComponent(Component *component); void removeComponent(Ogre::String familyName); template<typename T> T* getComponent(Ogre::String familyName) { return dynamic_cast<T*>(m_components[familyName]); } protected: // Properties ID m_ID; Ogre::String …

2
RTSゲームユニットの構造
moveToやAttackアクションなどを複数回プログラムすることなく、多くの異なるユニットを作成する方法が欲しい 私の見方では、これを行うには2つの方法があります。 できること/できないことを指定するフラグを持つ単一の汎用ユニットクラス(その後、静的配列でインスタンスを作成し、必要に応じてそれらを取得します) (Attack、Harvest、Patrol)のようなユニット固有のアクションの抽象メソッドを持つ抽象ユニットクラス。これらは、ユニットが実際に何も取得できない場合でも、すべてサブクラスで実装する必要があります。 これを行う最初の方法は最も簡単に思えますが、ほとんどのユニットで多くのコードが使用されないことになります。 2番目の方法も機能します。しかし、リソースを収穫できる2つの異なるユニットを使用することにした場合、2つの異なるクラスにまったく同じコードを使用することになります。これは正しい方法とは思えません。 これはこの問題への正しいアプローチですか? AoEのようなゲームでは、すべてのユニットが、私が推測するもの、アクション/注文のリストのようなものを持っています。次に、そのアクションを必要とするすべてのユニットにそれを与えます。 はっきりしない(もっともらしい)場合、または探しているものに関する詳細情報が必要な場合は、コメントでお尋ねください。
18 unity  c#  architecture  rts 

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