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

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

1
コンポーネントベースのエンティティアーキテクチャにおける「システム」の役割は何ですか?
私はエンティティのコンポーネントとシステムについて多くのことを読んでおり、エンティティが単なるIDであるという考えは非常に興味深いと考えてきました。 しかし、これがコンポーネントの側面やシステムの側面でどのように完全に機能するのかわかりません。コンポーネントは、関連するシステムによって管理される単なるデータオブジェクトです。衝突システムは、空間データ構造とともにいくつかのBoundsComponentを使用して、衝突が発生したかどうかを判断します。 これまでのところすべて良いですが、複数のシステムが同じコンポーネントにアクセスする必要がある場合はどうでしょうか?データはどこに保存する必要がありますか?入力システムはエンティティBoundsComponentを変更できますが、物理システムはいくつかのレンダリングシステムと同じコンポーネントにアクセスする必要があります。 また、エンティティはどのように構築されますか?私がこれまで読んだことのある利点の1つは、エンティティ構築の柔軟性です。システムは本質的にコンポーネントに結び付けられていますか?新しいコンポーネントを導入したい場合、新しいシステムを導入したり、既存のシステムを変更したりする必要がありますか? 私がよく読んだもう1つのことは、エンティティの「タイプ」は、そのコンポーネントが持っているものによって推測されるということです。エンティティが単なるIDである場合、ロボットエンティティを移動またはレンダリングし、何らかのシステムで変更する必要があることをどのようにして知ることができますか? 長い投稿で申し訳ありません(少なくとも、私の携帯電話の画面からはそう思われます)!

8
ゲームアーキテクチャでMVCとTDDが採用されないのはなぜですか?[閉まっている]
私はこれを序文として、膨大な量のゲームソースを見たことがなく、ゲームのやり方で多くを構築したこともないと言います。 しかし、Webアプリで「エンタープライズ」コーディングプラクティスを採用しようとすると、ゲームのソースコードを真剣に見ると頭が痛くなります。「このビューロジックはビジネスロジックで何をしているのでしょうか。リファクタリングが必要です。 」 これを使用してゲームプロジェクトを開始しようとしているので、これを心配しています。これを使用するゲームの例があまりないので、開発プロセスをmvc / tddしようとしても邪魔されるのか、助けになるのかわかりませんまたは、コミュニティでより良いアーキテクチャの実践を推進します。 以下は、プロトタイピングゲームに関する素晴らしい記事からの抜粋です。しかし、私には、多くのゲーム開発者が本番ゲームコードを記述する際に使用しているように見える態度を正確に感じました。 間違いその4:ゲームではなくシステムを構築する ...あなたが自分の前に直接進まない何かに取り組んでいるのを見つけたら、すぐにそこで止めてください。プログラマーとして、私たちはコードを一般化し、エレガントにし、あらゆる状況に対処できるようにする傾向があります。かゆみはひっかき傷ではなく非常に難しいことがわかりましたが、その方法を学ぶ必要があります。コードではなく、最終的に出荷するゲームであることに気付くまでに何年もかかりました。 エレガントなゲームコンポーネントシステムを記述せず、エディターを完全にスキップしてコード内の状態を固定し、データ駆動型の自己解析的なXMLの狂気を避け、気の毒なことをコーディングするだけです。 ...できるだけ早く画面に表示します。 また、「余分な時間をかけてこれを正しい方法で行えば、ゲームでそれを再利用できる」という議論を決して使わないでください。今まで。 ゲームは(ほとんど)視覚指向であるため、コードがビュー内で大きく重み付けされるので、モデル/コントローラーにデータを移動するメリットはほとんどありません。 MVCがパフォーマンスオーバーヘッドを導入するという議論を聞いたことがありますが、これは時期尚早な最適化であり、MVCオーバーヘッドを心配する前に取り組むべきより重要なパフォーマンスの問題があるようです(たとえば、レンダリングパイプライン、AIアルゴリズム、データ構造トラバーサルなど)。 TDDについても同じです。テストケースを採用しているゲームはあまり見られませんが、おそらくこれは上記の設計上の問題(ビューとビジネスの混合)と、視覚的なコンポーネント、または確率的な結果に依存するコンポーネント(物理シミュレーション内で操作するなど)をテストするのが難しいという事実による可能性があります)。 おそらく間違ったソースコードを見ているだけなのに、なぜゲームデザインでこれらの「エンタープライズ」プラクティスが採用されていないのでしょうか?ゲームの要件は本当に大きく異なりますか、それとも人/文化の問題ですか(つまり、ゲーム開発者のバックグラウンドが異なるため、コーディングの習慣も異なります)。

3
メインゲームループを作成するにはどうすればよいですか?[閉まっている]
メインゲームループを作成するにはどうすればよいですか?ゲームループで行うべきことと、ゲームループですべきでないことは何ですか? 私はそれらをたくさん書きましたが、ゲームループを実際に読んだことがありません。私はそれらをかなり改善できると確信していますが、どうすればいいかわかりません。

9
エンティティ通信はどのように機能しますか?
2つのユーザーケースがあります。 どのようにメッセージをentity_A送信しtake-damageますentity_Bか? のHPをどのようにentity_A照会しますentity_Bか? これまでに遭遇したことがあります: メッセージキュー entity_Atake-damageメッセージを作成し、それをentity_Bのメッセージキューに投稿します。 entity_Aquery-hpメッセージを作成してに投稿しentity_Bます。 entity_B代わりに、response-hpメッセージを作成してに投稿しentity_Aます。 パブリッシュ/サブスクライブ entity_Btake-damageメッセージをサブスクライブします(おそらく、何らかのプリエンプティブフィルタリングを使用して、関連するメッセージのみが配信されます)。 を参照entity_Aするtake-damageメッセージを生成しますentity_B。 entity_Aupdate-hpメッセージをサブスクライブします(フィルタリングされる可能性があります)。すべてのフレームがメッセージをentity_Bブロードキャストしupdate-hpます。 信号/スロット ??? entity_Aupdate-hpスロットをentity_Bのupdate-hp信号に接続します。 もっと良いものはありますか?これらの通信方式がゲームエンジンのエンティティシステムにどのように結び付くのかを正しく理解していますか?

11
ゲームアーキテクチャについて学ぶための優れたリソースですか?[閉まっている]
ゲームアーキテクチャについて学ぶための優れたリソースはありますか?さまざまなアーキテクチャの概要を探しています。エンティティ、物理エンジン、スクリプトなど、ゲームのさまざまな部分に関する情報を見つける傾向がありますが、すべての部分をどのようにまとめるかについては情報を見つけません。 ボーナスとして、ゲームのタイプはこれにどのように影響しますか?たとえば、プラットフォーマーとMMOには違いがあります。
104 architecture 

8
ベクターアートを使用するゲームが増えないのはなぜですか?[閉まっている]
ベクトルアートはリソース/スケーラビリティの点でより効率的であるように思えます。ただし、ほとんどの場合、アーティストはビットマップ/ラスタライズされたアートを使用しています。これは、ゲームプログラマー/デザイナーによってアーティストに課された制限ですか?プログラマーとしては、ベクターアートの方が理想的だと思います。なぜなら、アートを再作成したり、本当に大きなグラフィックを作成したり、グラフィックをぼかすことなく解像度を拡大できるからです。 質問:SVG / AIを使用して2Dゲームアートを作成する人が増えないのはなぜですか?それは実際に優先されますか?ビットマップグラフィックスは標準ですか、それとも制限ですか? 背景:私はエンジンに取り組んでおり、ベクターベースのグラフィックスについてのちょっとしたアイデアがありました。ただし、将来アーティストを怒らせたくはありません。 これは、プラグマティズムとゲームの開発を中心とした問題だと思います。

11
リプレイシステムの設計方法
それでは、リプレイシステムをどのように設計しますか? Warcraft 3やStarcraftのような特定のゲームでは、ゲームが既にプレイされた後に再び見ることができます。 比較的小さなリプレイファイルになります。だから私の質問は: データを保存する方法は?(カスタム形式?)(小さなファイルサイズ) 何が救われるのでしょうか? 期間を記録するために他のゲームで使用できるように汎用化するにはどうすればよいですか(たとえば、完全一致ではありません)? 早送りと巻き戻しを可能にします(WC3は覚えている限り巻き戻しできませんでした)


8
ゲームエンジンでのイベント駆動型通信:はいまたはいいえ?
私はGame Coding Completeを読んでおり、著者はゲームオブジェクトとモジュール間のイベントドリブン通信を推奨しています。 基本的に、すべての生きているゲームアクターは、内部イベントメッセージングシステムを介して主要モジュール(物理、AI、ゲームロジック、ゲームビューなど)と通信する必要があります。つまり、効率的なイベントマネージャーを設計する必要があります。設計が不適切なシステムは、特にモバイルプラットフォームに影響を与えるCPUサイクルを消費します。 これは実証済みで推奨されるアプローチですか?使用するかどうかはどのように決定すればよいですか?

9
PlayerとWorldの間の循環依存関係を回避する方法は?
私は、上下左右に移動できる2Dゲームに取り組んでいます。基本的に2つのゲームロジックオブジェクトがあります。 プレーヤー:世界に対して相対的な位置を持っている ワールド:マップとプレイヤーを描画します これまでのところ、WorldはPlayerに依存している(つまり、参照している)ため、プレイヤーキャラクターをどこに描画するか、マップのどの部分を描画するかを把握するための位置が必要です。 衝突検出を追加して、プレーヤーが壁を通過できないようにします。 私が考えることができる最も簡単な方法は、意図した動きが可能かどうかをプレイヤーに世界に尋ねることです。しかし、それはPlayerとWorldの間に循環的な依存関係を導入します(つまり、それぞれが他方への参照を保持します)。私が思いついた唯一の方法は、WorldにPlayerを移動させることですが、それはやや直感的ではありません。 私の最良の選択肢は何ですか?または、循環依存関係を回避する価値はありませんか?

8
ゲームアーキテクチャに多くのシングルトンが含まれないようにするにはどうすればよいですか?
ゲームの作成にはcocos2d-xゲームエンジンを使用しています。エンジンはすでに多くのシングルトンを使用しています。誰かがそれを使用した場合、彼らはそれらのいくつかに精通している必要があります: Director SimpleAudioEngine SpriteFrameCache TextureCache EventDispatcher (was) ArmatureDataManager FileUtils UserDefault さらに、全体で約16のクラスがあります。このページで同様のリストを見つけることができます:Cocos2d-html5 v3.0のシングルトンオブジェクトしかし、書きたいときは、もっと多くのシングルトンが必要です。 PlayerData (score, lives, ...) PlayerProgress (passed levels, stars) LevelData (parameters per levels and level packs) SocialConnection (Facebook and Twitter login, share, friend list, ...) GameData (you may obtain some data from server to configure the game) IAP (for …

7
成果を処理するための柔軟なフレームワークを設定するにはどうすればよいですか?
具体的には、「キルx敵」などの単純な統計駆動型の成果を超える処理を行うのに十分な柔軟性を備えた達成システムを実装する最良の方法は何ですか。 統計ベースのシステムよりも堅牢なものと、「それらをすべて条件としてハードコードする」よりも組織的で保守可能なものを探しています。統計ベースのシステムでは不可能または扱いにくい例:「イチゴの後にスイカをスライスする」、「無敵の間にパイプを下る」など。

10
ゲーム状態「スタック」?
ゲームの状態をゲームに実装する方法を考えていました。主なものは次のとおりです。 半透明の上位の状態-一時停止メニューから背後のゲームまで見ることができる OO-Iの何かは、これをより簡単に使用し、背後にある理論を理解し、組織化を維持し、さらに追加することに気付きます。 リンクリストの使用を計画しており、スタックとして扱いました。これは、半透明のために以下の状態にアクセスできることを意味します。 計画:状態スタックをIGameStatesへのポインターのリンクリストにする。一番上の状態は独自の更新コマンドと入力コマンドを処理し、その下の状態を描画するかどうかを決定するメンバーisTransparentを持っています。 それから私はできました: states.push_back(new MainMenuState()); states.push_back(new OptionsMenuState()); states.pop_front(); プレーヤーの読み込みを表すために、オプションに移動してから、メインメニューに進みます。 これはいいアイデアですか、それとも...?他の何かを見るべきですか? ありがとう。

5
GameManager神オブジェクトを回避する方法は?
ゲームコードの構造化に関する質問の答えを読んだところです。ユビキタスGameManagerクラスについて、そしてそれが本番環境でどのように頻繁に問題になるのかと思いました。これについて説明しましょう。 まず、プロトタイピングがあります。素晴らしいコードを書くことを誰も気にせず、ゲームプレイが積み重なるかどうかを確認するために何かを実行しようとします。 その後、グリーンライトがあり、物事をきれいにするために、誰かがを書きますGameManager。おそらく、たくさんのを保持するために、おそらくGameStatesいくつかを保存するためGameObjectsに、実際には大きなものはありません。かわいい、小さな、マネージャー。 プリプロダクションの穏やかな領域では、ゲームはうまく形成されています。コーダーには、適切な睡眠の時間と、素晴らしいデザインパターンを使用して物事を構築するための多くのアイデアがあります。 その後、生産が開始され、もちろん、すぐにクランチタイムがあります。バランスの取れた食事はなくなり、バグトラッカーは問題を抱えて割れ、人々はストレスを感じ、昨日ゲームをリリースする必要があります。 その時点で、通常、GameManagerある本物のビッグ(滞在丁寧に)混乱。 その理由は簡単です。結局のところ、ゲームを作成するときは、すべてのソースコードが実際にゲームを管理するためにここにあります。この小さな追加機能またはバグ修正をに追加するだけで、他のすべてがとにかく保存されます。時間が問題になると、別のクラスを記述したり、この巨大なマネージャーをサブマネージャーに分割する方法はありません。GameManager もちろん、これは古典的なアンチパターン、つまり神オブジェクトです。それは悪いことであり、合併する痛み、維持する痛み、理解する痛み、変革する痛みです。 これを防ぐために何を提案しますか? 編集 名前のせいにするのは魅力的だと思います。もちろん、GameManagerクラスを作成することはそれほど素晴らしい考えではありません。しかし、同じことがクリーンに起こることができるGameApplicationか、GameStateMachineまたはGameSystem、ダクトテープの好きなプロジェクトの終わりまでになってしまうこと。命名に関係なく、ゲームコードのどこかにそのクラスがあります。これは現時点では単なる胚に過ぎません。どのモンスターになるかはまだわかりません。したがって、「ネーミングのせいにする」という答えは期待していません。これが発生しないようにする方法、コーディングアーキテクチャ、および/またはチームが本番のいずれかの時点で発生することを知って従うことができるプロセスが必要です。1か月間のバグ修正と土壇場での機能が、それらがすべて1つの巨大な保守不能なマネージャーになったという理由だけで、言うのを捨てるのはあまりにも悪いことです。

4
巨大なプレイヤークラスを回避するにはどうすればよいですか?
ほとんどの場合、ゲームにはプレイヤークラスがあります。プレイヤーは通常、ゲームで多くのことを行うことができます。つまり、このクラスは、プレイヤーが実行できる各機能をサポートするための膨大な変数で巨大になります。それぞれのピースはそれ自体ではかなり小さいですが、組み合わされると数千行のコードになり、必要なものを見つけるのが苦痛になり、変更を加えるのが怖くなります。基本的にゲーム全体の一般的なコントロールであるもので、この問題をどのように回避しますか?

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