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

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

4
OOPなしでゲームを作るには?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、1つの問題のみに焦点を当てますこの投稿を編集するます。 6年前休業。 現在、ゲーム開発の勉強とゲーム制作の練習をしています。 私はゲームで多くのOOPを使用しています。たとえば、発射される各ミサイルはMissileオブジェクトのインスタンスであり、オブジェクトのリストに追加されMissileます。ゲームの各戦車はTankオブジェクトです。等。 プログラム全体の設計はこれに基づいています。たとえば、Missileオブジェクトのあると、すべてのフレームでミサイルを移動したり、それらを描画したりできます。またTank、すべての戦車にオブジェクトのインスタンスがあると、何かと衝突したかどうかなど、各戦車をチェックできます。 ゲーム(パックマンよりも複雑)が非OO言語でプログラムされる方法を想像するのは難しいです。(もちろん、非OOプログラマを軽視しません)。所要時間だけでなく、ほとんどの場合、この方法でゲームを設計する方法についてもです。 オブジェクト指向プログラミングを使用せずにゲームを設計することは想像できません。ゲームプログラムの設計方法に関する私の完全な理解はOOPに基づいているためです。 質問したいのですが、今日、OOPを使用してプログラミングされていないゲームはありますか?開発プロセスの主要な要素としてOOPを使用しない「プロフェッショナル」ゲームはありますか? もしそうなら、たとえば、OOPなしで、タンクとN個のミサイルの間の衝突検出をどのように実装できるかについて教えてください。

4
エンティティシステムとレンダリング
わかった、これまで私が知っていること。エンティティには、次のような情報を保持するコンポーネント(データストレージ)が含まれています。-テクスチャ/スプライト-シェーダー-など そして、これをすべて描画するレンダラーシステムがあります。しかし、私が理解していないのは、レンダラーの設計方法です。「ビジュアルタイプ」ごとに1つのコンポーネントが必要ですか。シェーダーなしのコンポーネント、シェーダー付きのコンポーネントなど これを行うための「正しい方法」についての入力が必要です。注意すべきヒントと落とし穴。

3
最高のピアツーピアゲームアーキテクチャ
ゲームクライアントが次のような設定を検討します。 コンピューティングリソースが非常に小さい(モバイルデバイス、スマートフォン) すべてが共通のルーター(LAN、ホットスポットなど)に接続されている ユーザーは、外部サーバーなしでマルチプレイヤーゲームをプレイしたいと考えています。 1つの解決策は、1台の電話で信頼できるサーバーをホストすることです。この場合、このサーバーもクライアントになります。ポイント1を考慮すると、電話のコンピューティングリソースが十分でないため、このソリューションは受け入れられません。 そのため、ゲームのシミュレーション負荷をクライアント間で分散するピアツーピアアーキテクチャを設計したいと考えています。ポイント2のため、システムは最適化に関して複雑である必要はありません。レイテンシーは非常に低くなります。各クライアントは、自分自身と彼の直接の環境に関するデータの信頼できるソース(たとえば、弾丸)になることができます。 そのようなアーキテクチャを設計するための最良のアプローチは何でしょうか?そのようなLANレベルのピアツーピアプロトコルの既知の例はありますか? ノート: ここではいくつかの問題に対処していますが、そこにリストされている概念は、私には高レベルです。 安全保障 信頼できるサーバーが1つもないことはセキュリティの問題であることはわかっていますが、この場合はクライアントを信頼してもかまいません。 編集: 私は言及するのを忘れていました:かなりテンポの速いゲーム(シューティングゲーム)になります。 また、私はGaffer on Gamesでネットワーキングアーキテクチャについてすでに読みました。

2
レンダリングロジックをGameObjectクラスの外に移動するための戦術
ゲームを作成するとき、多くの場合、すべてのエンティティが継承する次のゲームオブジェクトを作成します。 public class GameObject{ abstract void Update(...); abstract void Draw(...); } したがって、更新ループでは、すべてのゲームオブジェクトを反復処理して状態を変更する機会を与え、次に次の描画ループですべてのゲームオブジェクトを再度反復処理して、自分自身を描画する機会を与えます。 これは、単純なフォワードレンダラーを備えた単純なゲームではかなりうまく機能しますが、モデル、複数のテクスチャ、およびゲームオブジェクト間の密結合を作成するすべての最悪の脂肪描画メソッドを格納する必要があるいくつかの巨大なゲームオブジェクトにつながることがよくあります。現在のレンダリング戦略とレンダリング関連のクラス。 レンダリング戦略をフォワードから据え置きに変更する場合、多くのゲームオブジェクトを更新する必要があります。そして、私が作成するゲームオブジェクトは、可能な限り再利用できません。もちろん、継承や構成はコードの重複との闘いに役立ち、実装の変更が少し簡単になりますが、それでもまだ足りないと感じています。 おそらく、より良い方法は、GameObjectクラスからDrawメソッドを完全に削除して、Rendererクラスを作成することです。GameObjectには、それを表現するモデルやモデルにペイントするテクスチャなど、ビジュアルに関するデータを含める必要がありますが、これを行う方法はレンダラーに任されます。ただし、レンダリングには境界線のケースが多いことが多いため、これによりGameObjectからレンダラーへの密結合が削除されますが、レンダラーはすべてのゲームオブジェクトについてすべて知っている必要があります。固く結ばれた。これはかなりの数の良い習慣に違反します。多分データ指向設計がうまくいくかもしれません。ゲームオブジェクトは確かにデータですが、レンダラーはこれによってどのように駆動されますか?よく分かりません。 だから私は途方に暮れていて、良い解決策を考えることができません。私はMVCの原則を使用しようとしましたが、以前はゲームでそれを使用する方法についていくつかのアイデアがありましたが、最近は思ったほど適切ではないようです。皆さんがこの問題にどのように取り組んでいるのか知りたいです。 とにかく要約してみましょう。次の設計目標をどのように達成できるかに興味があります。 ゲームオブジェクトにレンダリングロジックがない ゲームオブジェクトとレンダリングエンジン間の疎結合 知っているすべてのレンダラーはありません レンダーエンジン間のランタイム切り替えが望ましい 理想的なプロジェクトセットアップは、互いに参照する必要のない別個の「ゲームロジック」とレンダリングロジックプロジェクトです。 John CarmackがTwitterで、実行時にレンダーエンジンを入れ替えることができ、両方のレンダラー(ソフトウェアレンダラーとハードウェアアクセラレーテッドレンダラー)を使用するようにシステムに指示することもできる柔軟性のあるシステムを持っていると私が言ったとき、この思考トレインはすべて始まりました。同時に、彼は違いを調べることができます。これまでにプログラムしたシステムは、それほど柔軟ではありません

1
マルチプレイヤースペース分割のための効率的なソリューション?
この質問は少しトリッキーですが、私はそれを明確にするように努めます。 私がオンラインゲーム(MMOスケールではない)を構築しているとしましょう。しかし、それは信頼できるサーバーアプローチで可能な限り多くのプレイヤーをサポートします。AIシミュレーションの敵がたくさんいる本当に大きな世界が欲しいです。 スペースを分割して処理の必要がないものを処理しないことにより、サーバーのCPUを節約するいくつかの戦略を知っています。ロードタイムと小さなトランジションを必要とする地域ですでに世界を分割しています。ローカルで(単独で、または数人の友人と一緒に)プレイするときにゲームプレイの品質を維持することが重要だと思います。プレイヤーが1つまたは2つ以上のリージョンにいるとは思わない。 問題は、リージョンがかなり大きくなり、一度に多くのNPCをシミュレートできることです。プレイヤーの経験に影響を与えずにこれをどのように処理しますか?地域ごとに1つのサーバーなどのアプローチは、この表には含まれていません。 私は主に敵の大群、さらには平和なNPCを保持するためのデータ構造を探しています。質問を完成させるために、車両が存在するため、リージョン内を移動するのがかなり速く、エリアを間引く「タイミング」に影響を与えることに注意してください。

3
何かが起こったときに音を鳴らす良い方法は?この音はどうですか?
だから私は自分のクラスがどれだけモノリシックになるかを考えていました。たとえば、CharacterクラスのJumpメソッドでは、サウンドエフェクトオブジェクトへの参照があり、それを再生できます。それ自体は問題ありませんが、物理学、アニメーション、衝突などを考慮に入れると、Jumpメソッドは巨大になり、Characterクラスには多くの異なるものへの多くの依存関係があります。それでも、これで問題ない可能性があります。ただし、キャラクターがジャンプしたときにサウンドを再生したくない場合はどうすればよいでしょうか。さて、コードのごちゃごちゃした混乱の中から特定のコード行を見つけてJump、コメントアウトするか、何でもしなければなりません。 それで..と思っていました。 代わりに、ある種のAudioSystemクラスがあり、他のクラスに関心のあるランダムなイベントをサブスクライブした場合はどうなるでしょうか。たとえば、クラスにはメソッド内のクラス内で発生CharacterするJumpedイベント(静的だと思います)があるかもしれませんCharacter。次に、Characterクラスは、キャラクターがジャンプしたときに再生される小さな音響効果について何も知りません。これAudioSystemは、静的イベントを使用してゲーム内で発生する特定のイベントでサウンドエフェクトをフックするためにプログラマが後退できる巨大なクラスです。その後、それはのようなサブクラスにして分離することができ大きすぎるなった場合はEffectsAudioSystem、BackgroundAudioSystem、AmbientAudioSystem、エトセトラ。 次に、ゲームのオプションで、これらの種類のサウンドを有効または無効にするチェックボックスを設定できます。実行する必要があるのは、単純な単一のブールフラグでその1つのシステムを無効にすることだけです。このシステムの考え方は、物理学、アニメーションなどにも拡張でき、プレーヤーのアクションから生じるゲームの応答のほとんどが、これらの精巧で分離されたシステムを通じて接続されます。 さて、私の質問は少しあいまいかもしれませんが、この種のことはどのように聞こえますか?このようなシステムについては、これまであまり話を聞いたことがありません。これは、今のところコーディングがまったく行われていないので、頭の中で問題になっているので、おそらく「理論的には良いが実際にはない」種類の取引の1つでしょう。この種のシステムは、より大きなゲームで機能するのでしょうか、それとも最終的に故障して、元のシステムよりもさらにスパゲッティの混乱になるのでしょうか?
10 c#  architecture  sound 

1
シーングラフにするかしないか?
ゲームにシーングラフを実装するかどうかの決定に苦労してきました。このようなツールを必要とするユースケースはいくつかありますが、実装の詳細の一部を取得できませんでした。 背景:モバイルプラットフォーム(主にAndroid)をターゲットにしたスペースシューティングゲームを書いていて、コードはほぼ完全にC ++です。私はミドルウェアを使用していません。特にレンダリングエンジンと物理エンジンは私自身の作品です。私の物理エンジンは、力と衝撃に基づいてオブジェクトの場所を更新します。私はまだアニメーションシステムを持っていませんが、いつかこれにアクセスする可能性があります(このディスカッションとは関係ない場合もあります)。 まず、良いユースケースについて説明します。複数の個別のパーツで構成されたボスがあり、それぞれが個別に損傷/破壊される可能性があります。たとえば、ボスエンティティの残りの部分とは無関係にダメージを受けるアームを持つボスがあるとします。腕が破壊されると、ボスの肩にある火の粒子の効果は、腕が破壊されたことを示している可能性があります。 現状では、物理エンジンの制約を使用してこのような問題を解決し、このような複合オブジェクトをまとめてみることにしました。そのような制約の1つは自由度0を提供し、本質的に変換行列です。これは、以下に説明するように、最終的に最初にシーングラフを無効にする問題を回避する試みです。 シーングラフの使用を拒否した主な理由は、物理世界とレンダリングシーンの両方でネストされたオブジェクト(親から変換を継承するオブジェクト)を保持する効率的な方法が見つからなかったためです。レンダリングのシーンには親空間のオブジェクトが必要ですが、物理世界ではオブジェクトがワールド空間(または少なくとも同じ空間)にある必要があります。両方のスペースで位置を追跡することは役立つかもしれませんが(避けられないかもしれません)、パフォーマンスに関連するだけでなく、それ自体の懸念を引き起こします。 ただし、上記のようなユースケースを考えると、親スペースで「作業」できることが非常に重要になると思います。制約を使用して物理エンジンにこれらの関係を維持するように強制しようとすると問題が発生します。 上記のユースケースと苦境を踏まえて、あるオブジェクトから別のオブジェクトに変換を渡すためにグラフ構造を使用する必要がありますか?もしそうなら、私の物理エンジンはどのように新しい場所を計算し、異なる空間にあるオブジェクトの交差テストを実行する必要がありますか?

2
最終的なWebベースのゲームのエンジンは、Webサービスとして開始する必要がありますか?
私は最近、カードゲーム用のエンジンを書き始めることにしました。私は大規模な「カード」プレイヤーではありませんが、友人がゲームを紹介してくれました(デンマーク語のゲームのスピンです)。 ゲームを3つのセグメントで開発したいと思います。 基本的なエンジン、カード/デッキ/ゲーム状態などを処理します ユーザーインターフェイス(モバイル/デスクトップWebアプリの形式) さまざまな戦略/困難などを伴う人工知能 これらは私の心の中で非常に異なるプロジェクトです...そして私はそれらがすべて長期的にどのように組み合わさるかを見るのに苦労しています。最初は、エンジンを使用してゲームを「プレイ」できるようにしたくもありません。エンジンは主に単体テストによってテストされます。クライアントが存在するまで、プレイテストは開始されません。したがって、ここにはクライアントとサーバーの関係のようなものがあります。 エンジンは非常に大きなパズルのピースです。私が知りたいのは、このエンジンの「パブリックAPI」をどのように開発するかです。 エンジンは非常に基本的なWebサービスであり、クエリを介してRESTful APIに状態を返すことができると考えていましたが、エンジン自体をWebアプリとして開発すると、プログラミングの決定に悪影響を及ぼす可能性があると心配しています。(たとえば、MVCマイクロフレームワークを選択した場合、このAPIは実際にはビューを備えていません... JSONを介してシリアル化されたオブジェクトを返すか、そのための何かです。MVCを次のようなサービスに使用するのは悪いことですか?この? ) 私のもう1つのアイデアは、エンジンは単なるコンソールアプリであり、後でそれとWebアプリの間でデータをパイプ処理するためのある種のブリッジを作成することでした。(ブリッジは実際には何でもかまいません。つまり、Webサーバーとゲームエンジンの両方がIRCサーバーでアイドル状態になり、その状態をチャネルで共有できます。) どのようなアプローチをとりますか(Webサービスとして開発するか、スタンドアロンアプリケーションとして開発して後でブリッジする)、そしてその理由は何ですか? ありがとう、ロビー。 編集:これはゲーム開発に属していると思います。わかりやすくするために、カードゲームエンジンを作成します。エンジンのAPIを公開して、将来的にWebクライアントやAIクライアントと統合できるようにする最善の方法を見つけ出そうとしています。 私はここにもアカウントを持っていなかったので、どうも:)

6
XNAでGame1を静的にするのは悪い考えですか?
私のGame1クラスを静的として持つのは本当に悪い考えですか?現在のところ、私のGame1クラスにはTileHandler、現在のタイルのセットに関係AnimalHandlerするすべてを処理し、すべての動物を(驚くほど)処理するというクラスがあります。 ここでAnimalHandler、タイルが歩き可能かどうかをチェックしたい場合にTileHandler問題が発生するか、歩き可能なタイルのリストをに渡す必要がありますがAnimalHandler、これは行いません。 何容易になるだろうことは作ることになりGame1、静的をし、その後にAnimalHandlerだけ行きますGame1._tileHandler.WalkableTile(position)。 これですぐに問題が発生したり、問題の原因となるものを確認したりすることはできませんが、静的クラスの使用を開始したばかりです。
10 xna  c#  architecture 

5
ネットコードの扱い方は?
ネットコードがゲームエンジンに「フック」できるさまざまな方法を評価することに興味があります。私は現在マルチプレイヤーゲームを設計しています。これまでのところ、少なくとも、ネットワークソケットを処理するために、グラフィックループとスクリプトを処理する他のエンジンとは別のスレッドを用意する必要があると判断しました。 私は、ネットワーク化されたゲームを完全にシングルスレッド化する1つの潜在的な方法がありました。つまり、非ブロッキングソケットを使用して、各フレームをレンダリングした後にネットワークをチェックします。ただし、フレームのレンダリングにかかる​​時間がネットワークラグに追加されるため、これは明らかに最適ではありません。ネットワーク経由で到着するメッセージは、現在のフレームのレンダリング(およびゲームロジック)が完了するまで待機する必要があります。しかし、少なくともこの方法では、ゲームプレイは多かれ少なかれスムーズなままです。 ネットワーク用に別のスレッドがあると、ゲームはネットワークに完全に応答することができます。たとえば、サーバーから状態の更新を受信するとすぐにACKパケットを送り返すことができます。しかし、ゲームコードとネットワークコードの間で通信するための最良の方法について少し混乱しています。ネットワークスレッドは受信したパケットをキューにプッシュし、ゲームスレッドはループ中の適切なタイミングでキューから読み取るため、この最大1フレームの遅延は解消されていません。 また、パケットの送信を処理するスレッドは、パイプを下りてくるパケットをチェックしているスレッドとは別のスレッドにしたいようです。これは、パイプが途中にある間は送信できないためです。着信メッセージがあるかどうかを確認します。selectまたは類似の機能について考えています。 私の質問は、最高のネットワーク応答性を実現するゲームを設計するための最良の方法は何でしょうか?明らかに、クライアントはできるだけ早くユーザー入力をサーバーに送信する必要があるため、イベント処理ループの直後、両方ともゲームループ内でnet-sendコードを送信することができます。これは意味がありますか?

3
マルチプレーヤーゲーム用のマッチメイキングとコミュニティシステムの実装[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前休業。 最近のゲームには、チャットチャンネルとゲームのマルチプレイヤーアスペクト用のマッチメイキングシステムを備えたマルチプレイヤーポータルがよくあります。 たとえば、battle.net、マジックザギャザリングのチャットルーム、ハロなどです。 さて、残りの私たちのインディーゲーマーは、おそらくバックエンドをゼロから作成するために多くの開発努力を費やすことができないでしょうが、どのようなオプションがありますか? 私はIRCをシステムのバックボーンとして使用することについて考えていました。そこから、「コミュニティ」の側面、プレーヤーの追跡、ゲームの追跡、それにマッチメイキングを実装します。これは、古いbattle.net(幼い戦争の時代)が使用していたもののようです。 問題は、これは簡単にできることですか?ircサーバーを実行するには何が必要ですか、また、これにはIRCクライアントの作成が必要だと思います(最近は多く行われているようです)。 他にも方法がある場合(たとえば、このようなもののためのオープンフレームワーク)、それらも聞いてみましょう。

2
ゲームシーングラフには何を含める必要がありますか?
ゲームシーングラフ内に正確に何を含める必要があるかを明確にしていただけませんか。次のリストをご覧ください。 ゲーム俳優?(当然のことながら、状態を変更するすべてのオブジェクトは、シーングラフの主要な部分である必要があります) 単純な静的ゲームオブジェクト (つまり、アニメーション化されない、または衝突しないバックグラウンドの場所を除外します) ゲームトリガー? ゲームライト? ゲームカメラ? 武器弾丸? ゲームの爆発と特殊効果? 上記で検討したオブジェクトタイプ。次に、シーングラフのカバレッジに進みます。 シーングラフには、レベルの開始以降のゲームレベルマップ全体を含める必要がありますか、それともマップの表示部分のみを含める必要がありますか?2番目がtrueの場合、プレイヤーが移動するときに、ゲームオブジェクトを追加または削除することにより、シーングラフが継続的に更新されます。ただし、マップの可視領域のみを含めると、トラバースと更新がはるかに高速になります。

3
エンティティを集約として作成する
私は最近、エンティティを動作から分離する方法と、この記事にリンクされている主な回答について尋ねました:http : //cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ ここで書かれている究極のコンセプトは、純粋な集合体としてのオブジェクトです。 C#を使用してゲームエンティティを純粋な集約として作成する方法を知りたいのですが。これがどのように機能するかという概念はまだよく理解していません。(おそらく、エンティティは特定のインターフェースまたは基本タイプを実装するオブジェクトの配列ですか?) 私の現在の考え方には、関連するインターフェイス(IMoveable、ICollectable、ISpeakableなど)を実装する各エンティティタイプの具象クラスがまだ含まれています。 エンティティの具体的なタイプを持たずに、純粋に集約としてエンティティを作成するにはどうすればよいですか?

2
コンテンツパイプラインツールをエンジンに埋め込む必要がありますか?
ゲームエンジンはどのくらい最小限にすべきですか?どのくらいのコンテンツパイプラインをエンジンに埋め込む必要がありますか? スーパーエンジンが役立ついくつかの使用例: ユーザーコンテンツをロードするとき、ユーザーはテクスチャをパッケージ化する必要はありません。エンジンはロード時にパッケージ化します。 スクリプトは、事前に生成されたものよりもはるかに大きいサイズのフォントを要求し、エンジンはttfファイルを解析して、新しいテクスチャアトラスを構築します。 ハローフォージ。 もちろんこれは無料ではありません。これには、C ++で記述されたコンテンツパイプラインツールが必要です。パイプラインで使用するサポートライブラリは、デバイスで使用するためにコンパイルする必要があります。コンテンツの生成にバグがないことが必要です。そして、それは一般的にあなたのエンジンを大きくして扱いにくくします。 他の長所と短所は何ですか? 長所は短所を上回っていますか? 特定の質問: エンジンはさまざまな画像フォーマットをロードできますか?TGAのみのローダーは、コードを渡すのがかなり簡単です。 オーディオ形式はどうですか?wavファイルのロードのみをサポートすることは可能ですか?巨大なことが多いアンビエント音楽ファイルはどうですか? エンジンは、動的TTF解析とアトラス生成が可能である必要がありますか? テクスチャパッキング。

6
ネットワーキングポンクローン
私はTCPソケット、UDP通信などの基本を持っていますが、これらをリアルタイムゲーム環境に適用する方法についてはあまりわかりません。 私は4プレーヤーのPongクローンを持っていて、3つのクライアントとサーバーの間でパドルの位置を同期する必要があります(サーバーは4番目のプレーヤーです)。現在、UDPを使用してリアルタイムの更新(パドルの動き)を送信し、TCPを使用してゲームロビーを設定しています。 大量のUDPトラフィックをスパム送信するのは悪いことですか?輻輳機能については、DCCPのようなものを検討する必要がありますか?それとも、これはこのような小規模プロジェクトでは本当に問題ではないのですか? クライアント/サーバー間で同期メッセージを送信する必要があるのはいつですか?現在、サーバーは、現在のゲーム状態のUDPパケットを管理可能な限り速くスパム送信しており、クライアントは、パドルの位置をできるだけ早くサーバーに送信しています。これはそれを行うための最良の方法ですか?Xミリ秒ごとにメッセージが送信されるように追加する必要がある遅延のようなものはありますか、またはイベントが発生したときにのみメッセージを送信する必要がありますか?(例えば、ユーザー入力によりパドル速度が変化した) クライアントにパドル位置をピアツーピアで通信させる方が良いでしょうか? 私はPongのコンテキスト内でこれらの質問をしていますが、これらの問題が他のゲームまたは一般化されたソリューションでどのように克服されるかにも興味があります。

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