タグ付けされた質問 「design-patterns」

設計パターンは、ソフトウェア設計の特定のコンテキスト内で一般的に発生する問題に対する一般的な再利用可能なソリューションです。

3
ゲーム開発で「友達」クラスを使用する
通常、C ++では、ゲームの開発速度はカプセル化よりも重視されます。そのため、実際には公開すべきではない、公開されている大量のクラスメンバーが表示されます。 ほとんどの場合、ほんの一部のクラスだけが実際に別のクラスの内部動作を知って、それらのプライベートデータを変更または読み取る必要があることがわかります。 このプライベートデータのパブリックゲッター/セッターを作成すると、本当に変更してはならないことがすぐにわかります。 ここでの妥協は、友達クラスを使用することでしょうか?または、私が見ない友達クラスにいくつかの欠点がありますか?

3
MVCまたはコンポーネント、あるいはその両方?
私は経験豊富な開発者ですが、最近ゲームプログラミングに取り組みたいと思っていますが、ご存知のように、ゲーム開発は他のほとんどのプログラミング形式とはまったく異なります(おそらくオペレーティングシステム開発によってのみ得られます)。 そうは言っても、Mike McShaffryによるGame Coding Complete(ISBN 978-1-58450-680-5)を読んでいます。 もともとは、通常のコンポーネント(SpacialComponent、VisualComponent、EntityLogicComponentなど)を組み合わせたコンポーネントモデルで開発しようとしましたが、McShaffry氏は非常に魅力的に見えるMVCモデルを使用することをお勧めしますが、どうすればよいかわかりません可能な限りコンポーネントモデルで動作させることができますが、コンポーネントがないと、MVCモデルは邪悪なモノリシックな継承モンスターのように見え、あまり柔軟ではないため、あまり興味がありません。 私はこの時点からどこに行くべきかについて本当に混乱しています。 より経験豊富なゲームコーディングブードゥーエキスパートは、考えや推奨事項を持っていますか? どうもありがとうございます!

4
複数のエージェントによる目標指向の行動計画
私は少し行き詰まっています: シミュレーションゲームにGOAP(目標指向のアクションプランニング、http: //alumni.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf)を使用してAIを実装しました。それはうまくいきます。 今、私はエージェントが協力できることを望みます(例えば、一緒に行動を起こす)。この場合、GoapActionsが緩いカプレットを保持する最高のAIデザインは何ですか? 彼らは一緒に計画すべきですか?(この場合、「世界国家」とは何ですか?)または、彼らは計画を共有する必要がありますか?ある種のメッセージシステム? 例 Agent1:Worldstate Agent 1:isLonely = true 目標Agent1:isLonely = false エージェント1の計画:AskAgent2ToTalk-> TalkToAgent2 Agent2 Worldstate Agent 2:hasWood = false 目標hasWood = true エージェント2の計画:GetAxe-> ChopWood-> BringWoodToSupply この星座を取得するにはどうすればよいですか? Agent1プラン:TalkToAgent2 Agent2プラン:TalkToAgent1-> GetAxe-> ChopWood-> BringWoodToSupply または、彼らが話していて、エージェントの1つが(たとえば、攻撃する敵によって)中断された場合、他のエージェントは、彼のTalktoAgent2アクションが終了したことを知っている必要があります。

2
大規模な反復設計
通常、ゲーム開発では、線形開発(ウォーターフォールモデル)には、プログラマーの正気を失わせる障害があります(ゲームは恐ろしいことが判明し、再設計できません)。反復設計を入力してください。反復設計により、遊び場でのさまざまな可能性のプロトタイピングが可能になります。残念ながら、これには大きな問題があります。プロジェクトのサイズが大きくなるとすぐに、繰り返しは退屈に長くなり、主な利点である迅速な結果が失われます。 大規模プロジェクトの設計反復をどのように短縮できますか?

1
ルール/検証設計パターン
チェスのようなゲームのルール/検証システムを作成するために使用できるデザインパターン(これは単なる例であり、実際のゲームにはより難しいルールのセットが必要です) 私はこのサイトでいくつかの質問を読みましたが、決定的な答えも、正しい方向に向かっている答えも見つかりませんでした。 このシステムには次のものが必要です。 ルールが適用されているすべてのオブジェクトは、検証の開始点であるメソッドを持つ特定のインターフェースを実装する必要があります ルールは2つのステップで適用する必要があります。まず、検証する必要があります(ポーンAが正方形D4に移動できます)。trueの場合はメソッドAを実行し、falseの場合はメソッドBを実行します。 すべてのオブジェクトには、特定の順序で適用する必要がある複数のルールを含めることができます。ルール1が終了すると、ルール2が検証を開始します。 すべての個別のルール(たとえば、1つの正方形のみを移動でき、斜めにしか移動できないなど)は、独自のクラスに属し、再利用可能で、ルールを必要とするオブジェクトに適用できる必要があります。 これはバックエンドのマルチプレイヤーゲームで使用されることに注意してください すべてのルールは、その有効性をテストするために複数のオブジェクトを必要とすることに注意してください。たとえば、通常、ポーンは1マス移動できますが、今度はゲームボードの次のスクエアが対戦相手のポーンで埋められます。結果:ポーンは移動できません。ポーンには、他のポーンの位置、または検証にゲームボードを含める必要があります。 これらのルールの別の言葉は、行動の制限です。

3
具体的な操作でバイナリの文字/アイテムの操作を行うにはどうすればよいですか?
次の問題があります。 アイテムは多くの状態を持つことができます: NORMAL = 0000000 DRY = 0000001 HOT = 0000010 BURNING = 0000100 WET = 0001000 COLD = 0010000 FROZEN = 0100000 POISONED= 1000000 アイテムは同時にいくつかの状態を持つことができますが、すべてではありません 同時にドライとウェットになることは不可能です。 ウェットアイテムをコールドすると、冷凍に変わります。 ウェットアイテムをホットにすると、通常に変わります アイテムはバーニングとポイズンにすることができます 等。 バイナリフラグを状態に設定し、ANDを使用してさまざまな状態を組み合わせたり、可能かどうかを事前に確認したり、別のステータスに変更したりしました。 新しい状態ごとにすべての状態をチェックするスイッチがなくても、この問題を効率的に解決するための具体的なアプローチはありますか? 2つの異なる状態をチェックすることは比較的簡単ですが、3番目の状態が存在する場合、それを行うのは簡単ではありません。

3
システムごとにプロファイリングとメモリプーリングを行う方法
各サブシステムの管理されたメモリプールのプロファイリングと維持に興味があったので、サウンドやグラフィックスなどで使用されているメモリの量に関する統計を取得できました。しかし、これを行うために機能するデザインは何でしょうか?複数のアロケーターを使用し、サブシステムごとに1つだけ使用することを考えていましたが、その場合、アロケーターのグローバル変数が発生します(または、私にはそれが見えるようになります)。私が見た/提案した別のアプローチは、単にnewをオーバーロードし、パラメータのアロケータを渡すことです。 私はここでバウンティを使ってスタックオーバーフローについて同様の質問をしましたが、それはおそらく私が漠然としているか、主題に関する知識を持つ十分な人々がいないかのようです。

1
カメラシステムの設計
一般的なゲームについて考えると、ゲームのタイプは関係ありません。カメラのタイプが必要になる可能性が高いです。例えば: デバッグカメラ:キーボードとマウスによって制御され、シーンの任意の場所を移動できます。 スクリプト化されたカメラ:これで、カメラに移動して、確定したパスをたどることができます。 プレーヤーのカメラ。 ... これらの各カメラタイプには、独自の更新機能があります。最も簡単な(そして悪い)システムは、汎用の更新関数とすべてのカメラタイプに特化した更新関数を備えたカメラマネージャークラスを用意することです。一般的な更新関数の内部には、カメラタイプに基づいて適切な更新関数を呼び出すswitchステートメントがあります。 これの代わりに、私は戦略パターンという別のアプローチを考えました。各カメラの動作(更新メソッド)を、共通のインターフェースを実装する適切なクラスに移動します。カメラマネージャーには、そのインターフェイスのメンバーがあり、必要な動作を動的に設定できます。 あれについてどう思う?他にどんなシステムを提案しますか?ありがとう。 追加情報:反射など、複数のカメラをアクティブにする必要がある可能性があります。つまり、私もそのことを考慮に入れなければなりません。

1
XNA GameComponentsを選択的に更新するにはどうすればよいですか?
XNAで作業している小さな2Dゲームがあります。これまでのところ、私はプレイヤー制御船でベクタースラストを操作しており、円を描くように回転するのはとても楽しいです。私はこれを実装しましたDrawableGameComponentと使ったゲームでそれを登録しgame.Components.Add(これを)船舶オブジェクトのコンストラクタに。 現在の実装で一時停止やメニューシステムなどの機能を実装するにはどうすればよいですか?特定のGameComponentsを更新しないように設定することは可能ですか? これは私がDrawableGameComponentを使用する必要があるものですか?そうでない場合、これのより適切な用途は何ですか?

2
JavaScriptのプロトタイプの継承を利用する
JavaScriptには、オブジェクトが他のオブジェクトから直接プロパティを継承するクラスフリーのオブジェクトシステムがあります。これは本当に強力ですが、古典的な訓練を受けたプログラマーには馴染みがありません。古典的なデザインパターンをJavaScriptに直接適用しようとすると、イライラします。しかし、JavaScriptのプロトタイプの性質で作業することを学ぶ場合、あなたの努力は報われるでしょう。 ... それはCの服を着たLispです。 - ダグラス・クロックフォード これは、キャンバスとHTML5を使用するゲーム開発者にとって何を意味しますか?私はゲームでの有用なデザインパターンについてこの質問を見てきましたが、プロトタイプの継承はクラシックの継承とは大きく異なり、これらの一般的なパターンのいくつかを適用する最良の方法には確かに違いがあります。 例えば、古典の継承は、私たちが作成することを可能にするmoveableEntityクラスを、その私たちのゲームの世界で動く(任意のクラスであることを拡張player、monster、bullet、など)。もちろん、JavaScriptを強化してそのように動作させることはできますが、そうすることで、その性質との戦いのようなものになります。指先にプロトタイプの継承がある場合、この種の問題へのより良いアプローチはありますか?

3
物理演算を備えた2Dゲームのマルチプレイヤー/ネットワーキングオプション[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 概要: 物理エンジンが最終バージョンでマルチプレーヤーサポートを備えているため、私の50%はBox2Dを備えた2Dサイドスクローラーを完成させました。ただし、現在のコードはシングルプレイヤーゲームです。 私は今どうすればいい? さらに重要なのは、マルチプレーヤーを実装してシングルプレーヤーと組み合わせる方法を教えてください。 シングルプレイヤーモードをマルチプレイヤーモードから分離してコーディングするのは悪い考えですか(NotchがMinecraftで行ったように)。 シングルプレイヤーでのパフォーマンスは可能な限り優れている必要があります(ループバックサーバーを使用してシングルプレイヤーモードを実装することで物理をシミュレートすることが問題になります) 完全な背景/質問: 私はC ++で比較的大規模な2Dゲームプロジェクトに取り組んでおり、その中核要素として物理学を使用しています。(私はそのためにBox2Dを使用しています) 完成したゲームはマルチプレイヤーを完全にサポートしているはずですが、ネットワークの部分を適切に計画しておらず、今までは基本的にシングルプレイヤーゲームに取り組みました。 マルチプレーヤーのサポートは、ほぼ完成したシングルプレーヤーゲームに比較的簡単で明確な方法で追加できると思いましたが、私が読んだことから、これは間違いです。 マルチプレイヤーゲームは最初から1つとしてプログラムする必要があると私は読みました。シングルプレイヤーモードは、実際には目に見えないローカルサーバーをホストし、ループバック経由で接続するだけで構成されています。(ほとんどのFPSゲームエンジンがそのように実行することがわかりました。例はソースです) だから、私は半分完成した2Dサイドスクローラーゲームで、私はどうすればよいのか本当にわかりません。 シングルプレイヤー/クライアントで作業を続けるだけでは今は役に立たないように見えます。後でコードを変更してリファクタリングする必要があるからです。 まず、このような状況に陥った可能性のある人への一般的な質問: どうすればいいですか? 次に、より具体的なもの-私は自分のゲームのネットワーキング部分にどのようにアプローチできるかを見つけようとしています: (可能な解決策:) シングルプレイヤー用の非表示/ループバックサーバー これには、基本的にシングルプレイヤーモードとマルチプレイヤーモードに違いがないという利点があります。追加のコードはそれほど必要ありません。 大きな欠点:シングルプレイヤーのパフォーマンスとその他の制限。2つの物理シミュレーションが実行されます。1つはクライアント用、もう1つはループバックサーバー用です。 ループバックサーバーからのデータへの直接パスを提供することで回避した場合でも、たとえばスレッドによる直接通信を通じて、シングルプレイヤーは制限されます。 これは、人々が大量のオブジェクトを一度にいじることを許可されるべきであるため、問題です。 シングルプレイヤー/マルチプレイヤーモードの分離 シングルプレイヤーモードに関与するサーバーはありません。 これがどのように機能するかは本当にわかりません。しかし、少なくとも、シングルプレイヤーのすべての機能を再実装するか、マルチプレイヤーモードに接着する必要があるため、多くの追加作業が必要になると思います。 シングルプレイヤー用のモジュールとしてのマルチプレイヤーモード これは、私がすぐに思いついた考えです。マルチプレイヤーはシングルプレイヤーゲームで構成され、追加のネットワークモジュールが読み込まれ、サーバーに接続されて、データを送受信し、シングルプレイヤーの世界を更新します。 振り返ってみると、以前にマルチプレイヤーモードを計画していなかったことを後悔しています。私はこの時点で本当に行き詰まっています。誰かが助けてくれることを願っています!
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.