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

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

3
64ビットの実行可能ファイルが増えないのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 これまで、多くのゲームが32ビットアーキテクチャでコンパイルされているのを見てきましたが、現在のWindowsユーザーのほぼ50%が64ビットOSを使用していますか?どうしてこれなの? 理由がより多くのオーディエンスを獲得するためである場合(32ビットアプリは64で実行できるため)再コンパイルが多かれ少なかれ2つのバージョンを作成しないでください。64ビットアプリを実行すると、パフォーマンスが向上します。使用可能なCPUレジスタとその他の機能。

3
エコノミーベースのゲームをコードでモデル化するにはどうすればよいですか?
古代文明をベースにした経済ゲームを作りたい。どのように設計すればよいかわかりません。「スペースインベーダー」のコピーのような小さなゲームで作業している場合は、次のように構成しても問題ありません。 メインコントロールクラス グラフィッククラス プレイヤークラス 敵クラス エコノミーゲームのような大規模なプロジェクトでこれを行う方法を理解できません。たくさんの町を含むカントリークラスを作成しますか?町にはたくさんの建築クラスが含まれていますか?ほとんどの人のクラスが含まれていますか?プレイヤーがアクセスするためにアクセスできる経路探索クラスを作成しますか?

3
エンティティコンポーネントシステムで「ブロブシステム」を回避する方法
現在、私は次の問題に直面しています: エンティティコンポーネントシステム(ECS)を使用してポンクローンを作成しようとしています。「フレームワーク」はすべて自分で書きました。したがって、すべてのコンポーネントでエンティティを管理するクラスがあります。次に、コンポーネントクラス自体があります。そして最後に、システムが必要とするコンポーネントを持つすべてのエンティティを取得する私のシステムがあります。 たとえば、私の移動システムは、位置コンポーネントと移動コンポーネントを持つすべてのエンティティを探します。位置コンポーネントは位置を保持し、移動コンポーネントは速度を保持します。 しかし、実際の問題は私の衝突システムです。このクラスは論理ブロブのようなものです。このクラスには特別なケースがたくさんあります。 例:パドルがボーダーと衝突する可能性があります。この場合、速度はゼロに設定されます。私のボールも国境にぶつかることがあります。しかし、この場合、その速度は境界線の法線でミラーリングされるだけなので、反映されます。これを行うために、私はボールに追加の物理コンポーネントを与えました。したがって、実際には、物理​​コンポーネントには実際のデータはありません。これは、オブジェクトが反射または停止したかどうかをシステムに通知するために存在する空のクラスです。 次に、これが発生します。ボールがパドルまたは境界に衝突したときに、いくつかのパーティクルをレンダリングしたいと思います。したがって、ボールは、衝突時にパーティクルを作成するように衝突システムに指示する別のコンポーネントを取得する必要があると思います。 次に、パドルと衝突するが境界とは衝突しないパワーアップが必要です。それが起こった場合、パワーアップは消えなければなりません。したがって、さらに多くのケースとコンポーネントが必要になります(一部のエンティティは特定のエンティティとのみ衝突できることをシステムに伝えるために、他の一部が実際に衝突できるとしても、すべてではなくボット、さらに衝突システムはパワーアップを適用する必要がありましたパドルなどなど)。 エンティティコンポーネントシステムは柔軟性があり、継承に問題がないので、良いことだと思います。しかし、私は現在完全に行き詰まっています。 複雑すぎると思いますか?この問題にどのように対処すればよいですか? もちろん、私は実際に「衝突後」の原因となるシステムを作成する必要があります。そのため、衝突システムは「はい、最後のフレームに衝突があります」とだけ表示し、次に「衝突後」システムがたくさんあります。すべて異なるコンポーネント(の組み合わせ)を必要とし、コンポーネントを変更します。たとえば、衝突が発生したときに停止する必要があるものを停止する衝突後移動システムがあります。次に、物事を反映する物理衝突後システムなど。 しかし、これは私にとっても適切な解決策ではないようです。たとえば、 私の移動後衝突システムには、位置コンポーネント、移動コンポーネント、および衝突コンポーネントを持つエンティティが必要です。次に、エンティティの速度をゼロに設定します。 物理衝突後システムには、位置コンポーネント、移動コンポーネント、衝突コンポーネント、および物理コンポーネントを持つエンティティが必要です。次に、速度ベクトルを反映します。 問題は明白です。衝突後の動きには、物理​​衝突後システムのエンティティのサブセットであるエンティティが必要です。したがって、2つの衝突後システムは同じデータで動作し、その効果は次のとおりです。エンティティには物理コンポーネントがありますが、衝突後の速度はゼロです。 これらの問題は、エンティティコンポーネントシステムで一般的にどのように解決されますか?それらの問題はいつものことですか?それとも私は何か間違っていますか?はいの場合、代わりに何をどのように行う必要がありますか?

3
世界についてゲームクライアントを更新する頻度は?
socket.ioを使用して、他のMMORPGと同様の通信、つまりメッセージとの安定した接続があります。 これまでの私の設計では、クライアントはすべての更新フレームでプレーヤーの位置とアニメーションフレームを送信します。サーバーはそのメッセージを受信すると、すべてのクライアントにブロードキャストし、それに応じてグラフィックを移動します。 これらを「収集」して、たとえば1秒の1/10に1回放送するほうがよいでしょうか。 また、クライアントは、発生と同時に多くの異なるメッセージ(exp得、アイテムをクリック)を送信するのか、それとも1つだけ収集するのか?最初の方が簡単に実装できます。

2
XNA Game Servicesと栄光のグローバル変数の違いは何ですか?
このMicrosoft.Xna.Framework.Gameクラスには、プログラマーがクラスのタイプとクラスのインスタンスをAddメソッドに提供することによってゲームにサービスを追加できるようにするServicesプロパティがあります。 これで、AudioComponentを必要とするすべてのクラスとメソッドにを渡す代わりに、Gameインスタンスを渡してサービスを検索するだけです。(サービスロケーター) ゲームには多くのサービス(GraphicsDevice、SceneGraph、AudioComponent、EffectsManagerなど)があるため、基本的にはすべてにGameを渡します。 では、なぜこれらのインスタンスをシングルトンにしないのですか?まあ、シングルトンはグローバルな状態を持ち、テストを防ぎ、設計をはるかに脆弱にするため、悪いからです。サービスロケーターは、オブジェクトへの依存関係を渡すだけでなく、そのクラスを他のサービスと結合するサービスロケーター(ゲーム)を渡すため、多くの人にとってアンチパターンと見なされます。 では、なぜXNAおよびゲーム開発でサービスが推奨されるのでしょうか。それは、ゲームが通常のプログラムとは異なり、それらのコンポーネントと密接に絡み合っており、クラスの機能に必要なすべてのコンポーネントを渡す必要が非常に煩雑になるためでしょうか?そのとき、ゲームサービスはゲームデザインに必要な悪ですか?長いパラメーターリストと結合を含まない代替手段はありますか?
10 xna  c#  architecture 

11
リレーショナルデータベース内の使用可能な在庫/オブジェクト/アイテム(カタナなど)の複数の「用途」(たとえば武器)をモデル化する方法
したがって、私はwww.ninjawars.netでアイテムの使用を拡大することに取り組んでおり、私たちが使用しているリレーショナルデータベースでそれらを柔軟に表現する方法が正確にわかりません。 私は間違ったツリーを吠えているかもしれないので、他の方向に遠慮なく提案してください。しかし、現在、各アイテムには関係する「タグ」が必要だと思っています。 たとえば、現在、カタナは「アイテム」データベースの行です。それを武器にして保持可能なものにするために、私は「特性」のデータベースと、それらの間を単純にリンクするitem_traitsテーブルがあると考えていました。 // Objects and their basic data item_id | item 1 | Naginata // Things that objects can do trait_id | trait 1 | weapon 2 | holdable // How those objects do those things, e.g. powerfully, weakly, while on fire _item_id | _trait_id | item_trait_data 1 | …

2
エンジン部品間の相互作用を実装する方法は?
ゲームエンジンパーツ間の情報交換の実装方法について質問したい。 エンジンは、ロジック、データ、UI、グラフィックの4つの部分に分かれています。初めに私は旗を通してこの交換をしました。たとえば、新しいオブジェクトがデータに追加された場合、isNewオブジェクトのクラスのフラグはとして設定されtrueます。その後、エンジンのグラフィックス部分がこのフラグをチェックし、オブジェクトをゲームの世界に追加します。 ただし、このアプローチでは、さまざまな種類のオブジェクトのすべてのフラグを処理するために、多くのコードを記述する必要がありました。 イベントシステムを使用することを考えましたが、これが適切なソリューションになるかどうかを知るのに十分な経験がありません。 イベントシステムが唯一の適切なアプローチですか、それとも別のものを使用する必要がありますか? それが問題なら、私はグラフィックスエンジンとしてOgreを使用しています。
10 c++  architecture 

4
ドメイン駆動設計はゲームに適していますか?
ドメインモデルについて読んだところですが、データのみを保持するクラス(ビヘイビア/メソッドが少ない)を持つゲームを開発して以来、それは私を啓蒙しました。これらのクラスを処理する仕事をマネージャーに割り当てました...そして今私のマネージャーは神のオブジェクトのように見えます。ロジックを処理することになっている私のゲームオブジェクトは、貧血ドメインモデルです。 私の現在のデザインパターンはシングルトンであり、これを実現するためにいくつかの再コーディングを行いたいと思います。(今のところ)ゲームでDDDを見たことがありませんが、これは良いアプローチですか?私はただの初心者プログラマーです(ゲーム開発者に傾倒しています)ので、ゲームを再設計するには肥大化する前に、優れたアーキテクチャーについてもっと学びたいです。

5
Vector3で演算子 '> ='を使用できないのはなぜですか?
私は私がように参照する2つの位置の間を移動するための四角形を取得しようとしている_positionAとします_positionB。どちらもタイプVector3です。長方形はうまく動きます。ただし、到達_positionBしても、本来のように反対方向に移動することはありません。 コードをもう一度見てみました。オブジェクトが移動ifすると、コード内のステートメントは、rectsの位置がに等しいフレームを逃したという結論に達しました_positionB。rectsの位置がより大きいか等しい 場合は、コードを変更して方向を逆にすることにしました_positionB。私のコードは長すぎないので、以下に表示します。 using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = false; public Vector2 speed = new Vector2(1f, 0f); private …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

3
AIエージェントはどのようにして環境に関する情報にアクセスしますか?
これはちょっとささいな質問かもしれませんが、私はこれを理解するのに苦労しています。よろしくお願いします。 オブジェクト指向設計を使用したゲーム開発で、AIエージェントがアクションを実行するためにゲームの世界から必要な情報にアクセスする方法を理解したいと思います。 誰もが知っているように、ゲームではAIエージェントが「環境を認識」し、周囲で何が起こっているかに応じて行動する必要があることがよくあります。たとえば、エージェントは、プレイヤーが十分に近づいたらプレーヤーを追跡する、移動中に障害物を回避する(障害物回避のステアリング動作を使用する)などのようにプログラムされている場合があります。 私の問題は、それを行う方法がわからないことです。AIエージェントは、ゲームの世界について必要な情報にどのようにアクセスできますか? 可能なアプローチの1つは、エージェントが必要な情報をゲームの世界から直接要求することです。 GameWorldというクラスがあります。重要なゲームロジック(ゲームループ、衝突検出など)を処理し、ゲーム内のすべてのエンティティへの参照も保持します。 このクラスをシングルトンにすることができます。エージェントがゲームワールドからの情報を必要とするとき、それは単にGameWorldインスタンスから直接それを取得します。 たとえば、エージェントSeekはプレーヤーが近くにいるときにプレーヤーにプログラムされます。これを行うには、エージェントはプレーヤーの位置を取得する必要があります。そのため、直接要求することができますGameWorld.instance().getPlayerPosition()。 エージェントは、ゲーム内のすべてのエンティティのリストを取得し、それをニーズに合わせて分析することもできます(どのエンティティが近くにあるか、またはその他の何かを把握するため): GameWorld.instance().getEntityList() これは最も簡単な方法です。エージェントはGameWorldクラスに直接連絡して、必要な情報を取得します。しかし、これが私が知っている唯一のアプローチです。良いものはありますか? 経験豊富なゲーム開発者はこれをどのように設計しますか?「すべてのエンティティのリストを取得し、必要なものを探す」アプローチは単純ですか?AIエージェントがアクションを実行するために必要な情報にアクセスできるようにするには、どのようなアプローチとメカニズムがありますか?
9 architecture  ai  oop 

3
多くの小さなポリモーフィッククラス(プロパティ、メッセージ、イベントとして使用)の柔軟な代替手段C ++
私のゲームには本当に役立つ2つのクラスがありますが、徐々に面倒になっていきます。メッセージとプロパティ(プロパティは基本的にコンポーネントです)。 どちらも基本クラスから派生しており、静的IDが含まれているため、システムは必要なものにのみ注意を払うことができます。それは非常にうまく機能しています...を除いて... ゲームを拡張するにつれて、常に新しいメッセージタイプとプロパティタイプを作成しています。2つのファイル(hppとcpp)と大量のボイラープレートを作成する必要があるたびに、本質的にclassIDと1つまたは2つの標準データ型またはポインターを取得します。 新しいアイデアを試したり試したりすることが実際の雑用になり始めています。新しいメッセージまたはプロパティタイプを作成したいときは、次のように入力できるようにしたい ShootableProperty: int gunType, float shotspeed; ItemCollectedMessage: int itemType; ヘッダーとcppファイルを作成する代わりに、親クラスなどを含むコンストラクターを作成します。 私の心の中で論理的に1行か2行ということを行うには、20行から40行(ガードやその他すべてを含む)程度です。 これを回避するためのプログラミングパターンはありますか? (私は何も知らない)スクリプトについてはどうですか?ほとんど同じである一連のクラスを定義する方法はありますか? 以下は、1つのクラスの外観です。 // Velocity.h #ifndef VELOCITY_H_ #define VELOCITY_H_ #include "Properties.h" #include <SFML/System/Vector2.hpp> namespace LaB { namespace P { class Velocity: public LaB::Property { public: static const PropertyID id; Velocity(float vx = 0.0, float vy = …

5
再起動せずにオプション画面からディスプレイ設定を更新するにはどうすればよいですか?
私は現在、Allegro 5とboostを使用してC ++ 11で2D RPGを作成しています。 私の目標は、オプションメニューでオプションが変更されたときにゲームの設定を更新することです。ユーザーに強制的にゲームを再開させたくありません。他のゲームでは、解像度を変更したり、フルスクリーンからウィンドウ表示にしたりするときに再起動を必要としないため、私のゲームもそうではありません。以下のシステムの簡略図をご覧ください。 OptionsScreenからゲームオブジェクトを直接呼び出す必要がないことに注意してください。破線は、私が達成しようとしている効果を示すためのものです。システムの別の部分でオプションが変更されたときに、どういうわけかゲームを更新します。 詳細説明 ScreenManagerには、GameScreen現在存在するすべてのオブジェクトのリストが含まれています。これらは、ポップアップを含むゲーム内のさまざまな画面になります。この設計は、多かれ少なかれC#/ XNAのゲーム状態管理サンプルに準拠しています。 にScreenManagerは、私のGameオブジェクトへの参照が含まれています。Gameオブジェクトは、ゲームの設定を初期化し、変更します。解像度を変更したい場合は、フルスクリーンにするか、Gameクラスで行うボリュームをミュートにします。 ただし、現在、OptionsScreenはGameクラスにアクセスできません。以下の図を参照してください。 GameScreenはonFinished、onTransitionStartおよびの3つのイベントを通知できonTransitionEndます。onOptionsChanged1つの画面だけがそれを行うため、ありません。ScreenManagerはすべての画面をGameScreens として処理するため、そのためのイベント処理を設定できません。 私の質問は、OptionsMenuの変更が再起動を必要とせずにすぐに変更されるように、どのようにデザインを変更できるかです。Game適用ボタンがクリックされたら、オブジェクトの更新をリクエストするのが望ましいでしょう。

4
エンジンコンポーネントのコンストラクタとデストラクタにロジックを配置する代わりに、個別の初期化メソッドとクリーンアップメソッドを使用する必要があるのはなぜですか?
私は自分のゲームエンジンに取り組んでおり、現在マネージャーを設計しています。メモリ管理については、コンストラクタとデストラクタを使用するよりもInit()、CleanUp()関数を使用する方が良いことを読みました。 これらの関数がどのように機能し、どのようにエンジンに実装できるかを確認するために、C ++コードの例を探していました。どのように機能しInit()、どのようにしCleanUp()てエンジンに実装できますか?

2
エンティティシステムの多くの動きの原因
私はエンティティシステムのアイデアにかなり慣れていません。たくさんのものを読んだことがあります(最も便利なのは、この素晴らしいブログとこの回答)。 未定義の数のソースによってオブジェクトの位置を操作できるほど単純なものを理解するのに少し問題があります。 つまり、私にはエンティティがあり、これには位置コンポーネントがあります。次に、このエンティティに、指定された時間内に指定された距離を移動するように指示するイベントをゲームで実行します。 これらのイベントはいつでも発生する可能性があり、位置と時間の値は異なります。その結果、それらは一緒に合成されます。 従来のOOソリューションでMoveByは、距離/時間を含むある種のクラスと、ゲームオブジェクトクラス内のそれらの配列がありました。各フレームではMoveBy、すべてのを反復処理して、位置に適用します。がMoveBy終了時間に達した場合は、アレイから削除します。 エンティティシステムでは、この種の動作をどのように再現するべきかについて少し混乱しています。 一度にこれらの1つだけがあった場合、それらを一緒に合成することができる代わりに、それはかなり単純で(私は信じます)、次のようになります。 PositionComponent 含む x, y MoveByComponent 含む x, y, time Entitya PositionComponentとaの両方があるMoveByComponent MoveBySystemこれらのコンポーネントの両方を持つエンティティを探し、の値をMoveByComponentに追加しますPositionComponent。にtime到達すると、そのエンティティからコンポーネントが削除されます。 多くの移動方法で同じことをどのように行うかについて、私は少し混乱しています。 私の最初の考えは、私が持っているだろうということです: PositionComponent、MoveByComponent上記と同じ MoveByCollectionComponentMoveByComponentsの配列が含まれています MoveByCollectionSystemこれは、a PositionComponentとa を持つエンティティを探し、その内部MoveByCollectionComponentのMoveByComponentsを繰り返し、必要に応じて適用/削除します。 これはより一般的な問題だと思います。同じコンポーネントの多くがあり、それぞれに対応するシステムが動作することを望んでいるからです。私のエンティティには、コンポーネントタイプ->コンポーネントのハッシュ内にコンポーネントが含まれているため、エンティティごとに特定のタイプのコンポーネントが1つだけ存在します。 これはこれを見るのに正しい方法ですか? エンティティは常に特定のタイプのコンポーネントを1つだけ持つ必要がありますか?

4
ゲーム内のグラフィックスエンジンと物理エンジンの間でデータを共有する必要がありますか?
いくつかのモジュールで構成されるゲームエンジンを書いています。それらの2つは、グラフィックエンジンと物理エンジンです。 それらの間でデータを共有することは良い解決策ですか? 2つの方法(共有かどうか)は次のようになります。 データを共有せずに GraphicsModel{ //some common for graphics and physics data like position //some only graphic data //like textures and detailed model's verticles that physics doesn't need }; PhysicsModel{ //some common for graphics and physics data like position //some only physics data //usually my physics data contains A LOT …

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