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

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

3
コンポーネントベースの設計:オブジェクトの相互作用の処理
コンポーネントベースのデザインで、オブジェクトが他のオブジェクトに対してどのように正確に機能するかはわかりません。 Objクラスがあるとしましょう。私がやります: Obj obj; obj.add(new Position()); obj.add(new Physics()); 次に、ボールを動かすだけでなく、物理を適用する別のオブジェクトを作成するにはどうすればよいでしょうか。実装の詳細ではなく、オブジェクトの通信方法を抽象的に探しています。エンティティベースのデザインでは、次のようになります。 obj1.emitForceOn(obj2,5.0,0.0,0.0); コンポーネント駆動の設計と基本的なことを行う方法をよりよく理解するための記事や説明は、非常に役に立ちます。

3
ナラティブ(または少なくとも時空間的でない)に焦点を当てたエンジン/フレームワークはありますか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 2年前休業。 編集(2):2つの答えがあり、それらのいずれも受け入れていないので、私はここで答えを検討することを動機づけると思いました:そのようなアプローチを強く示唆する何かが不可能/まったく役に立たないか、あるいは、テキストアドベンチャーゲーム/インタラクティブフィクションを超えた、少なくともある程度一般的なそのようなシステムの研究(フィールド)または例への言及。 詳細な調査を行ったふりはしませんが、調べたすべてのゲームエンジン/フレームワークは、形やエンティティを2つに分けて表現しているという意味で、美化されたグラフィックエンジンのようなものであることに気付きました。または、多分ある種の並行処理モデルが「組み込まれた」3次元ユークリッド空間で、これらの「エンティティ」に接続されたロジックの形式を指定できるようにします。 ゲームの「ルール」とナラティブは、これらのプリミティブの上に(エンジンに関して)アドホックな方法で書かれています。 明らかに、上記の説明はかなり単純化されています(何らかの形のクエスト/ナラティブシステムを含む無限エンジンなどのより専門的なエンジンを使用します)。 。 しかし、ゲームルール/ロジックの説明(または高レベル)(または少なくともゲームの非空間的な側面)などの概念を取り入れたエンジン/フレームワークを作成するためにどのような試みが行われたのでしょうか。基礎? 編集(4):これは、ゲームに空間的/グラフィック的側面が含まれないことを意味するのではなく、ロジックを関連付ける空間エンティティーではなく、プロット(またはゲームプレイまたは「ボードゲームルール」)の概念があります。 )次に、グラフィカルインターフェイスを実現するために記述します。 特に私は、実際の実装に役立つ方法で(たとえば、専用のフレームワークとは対照的に)ある程度大きなクラスのゲームのある種の(半)形式的なセマンティクスをキャプチャしようとする宣言的アプローチに興味がありますゲーム/ナラティブの定性分析)。 私が見たのは、ペトリネットベースのモデルを使用した物語のモデリング/分析に関する調査と、インタラクティブフィクションを作成するための言語における興味深いアプローチです。 編集(1):説明するためにおもちゃの例を追加すると思いました。 ポイントアンドクリックスタイルのアドベンチャー(SCUMMゲームなど)の作成に興味があったとしましょう。これらは、開始状態から終了まで、ほぼ線形で離散的な進行の概念に基づいていると分析することができます。 離散的な進行の概念に焦点を当て、ある程度の非直線性を考慮に入れて、基本的な理論として(制限された)DAGの理論を選択できます。したがって、このタイプのゲームを(この理論に対して)最も抽象的な形式で指定することは、この理論に公理を追加することに相当します(理論が特定のグラフを指定するか、単純に、グラフをキャプチャするために必要と思われるものをキャプチャするのに十分です) "プロット")。 これを実際のゲームに変えると、この理論を再生可能なものに埋め込むというHCI /インターフェース設計の問題に変わります(つまり、理論のモデルを構築する/遷移のあるユーザーインターフェースの状態のコレクションからグラフのホモ(イソ?)モルフィズムを見つける) DAGに「ゲームを指定する」)。 上記の架空のシナリオでは、ライブラリに取り込むことができるはずの少なくとも3つのことがわかります。まず、DAGまたはグラフ全般に​​関する変換/推論のためのツールが必要です。次に、プレイ可能なゲームとしてのグラフの表現が実際にグラフをモデル化していることを確認するのに十分なほど巧妙なユーザーインターフェイスライブラリ(たとえば、少なくとも部分的または非公式に、境界条件により、ゲームにスタック状態がないことを証明します) 。最後に、グラフを指定するためのより高レベルのライブラリのコレクションを指定できます。キャラクターとその相互作用を表現し、そのような観点からグラフ(の一部)を生成するためのライブラリーなど。 いくつかのヘルプライブラリを上にして低レベルの実装を行うだけでなく、DAGの「中間」理論を維持する理由は何ですか。答えは、正式なセマンティクスのすべての通常の理由です。正式な基盤を決めたので、ゲームの特定のプロパティを確認して、低レベルのインターフェイスライブラリの最適化などについて推論できるようにします(DAGをモデル化している限り、必要なことを実行できます)。それらの記述自体がそのような構造を記述しなければならないので、(文字/ダイアログなどの)高レベルの記述との比較ができないことを心配します。 私は上記のアプローチが具体的に機能することを決して意味していませんし、DAGが実際にメモリに保持されるものである必要はないということではありません(ラムダ計算などの計算形式に似たものを形成します)。しかし、これが私が興味を持っている種類のアプローチを示すことを願っています。 要するに、私はこの質問の代わりのタイトルがあったかもしれないと思います:どのようにダイクストラはコンピュータゲームを書いたでしょうか?

1
ゲームプログラミング:一般的な方法とデザインパターン[終了]
閉まっている。この質問はトピックから外れています。現在、回答を受け付けていません。 この質問を改善してみませんか? 質問を更新して、ゲーム開発スタック交換のトピックになるようにします。 2年前休業。 私はOpenGL 3.xをよりよく学ぶことができるように非常にシンプルなゲームエンジンを書き始めましたが、3Dゲームの設計方法に関する経験が乏しく、まばらな知識なので、通常、クラスを設計する必要があることに気づく問題に直面します。違う。私が直面している他の問題は、ゲーム内で時間を簡潔に追跡し、必要に応じて動きを更新する方法と、レンダラーに再描画が必要であることを伝える方法です。また、オブジェクト間でさまざまなフラグを渡すためにGet関数とSet関数を作成する必要がありますが、これは悪い習慣ですか? だから、タイトルが言うように、私は私を助け、ゲームデザインのいくつかの一般的なデザインパターン(つまり、ゲーム状態ハンドラー、フォントなど)を説明する本や記事/チュートリアル、ソースに興味があります。 ところで、私はまだfreeglutを使用していますが、先に進む前に、またはOpenGLをよく理解した後で、より良いウィンドウシステムに移行することをお勧めしますか?

5
さまざまなタイプのエンティティのリストの管理-より良い方法はありますか?
私はモバイルデバイス用の2Dスペースゲームを開発していますが、それは非常に複雑になり、私のソリューションは本当に混乱し、多くの繰り返しコードセグメントを生成します。 私は次のような異なるオブジェクトの複数のリストを持っている世界クラスを持っています: List<Enemy> enemys; List<Projectile> projectiles; List<Collectable> collectables; List<Asteroid> asteroids; List<Effect> effects; .. 各リストは、ワールドクラスによって更新されます。しかし、それだけではありません。各敵には、エンジンのリストと、敵によって更新される武器ランチャーのリストがあります。これで、各エンジンがいくつかの火の効果をワールドリストの「効果」に追加し、各武器の発射者が発射物をワールドリストの「発射体」に追加します。これらすべてのクラスには異なるパラメーターがあるため、クラスごとに追加の更新と追加のレンダリング関数が必要です。 少なくとも、それらはすべて「GameObject」の子であり、位置、速度、加速度ベクトル、境界ポリゴン、applyForceや有限状態マシンなどの関数などの基本的なものを提供します これを行うためのより良いまたはより一般的な方法はありますか?すべての異なるオブジェクトのすべての可能なパラメーターとメソッドを含む1つのキャッチオールクラスのように。(これはさらに混乱するコードを生成すると思います)

1
ターンベースのJRPG戦闘システムアーキテクチャリソース
過去数か月間、SDLライブラリーを使用してC ++で2D JRPG(和風RPG)をプログラミングするのに忙しかった。探索モードは多かれ少なかれ行われます。今はバトルモードに取り組んでいます。 私は、古典的なターンベースのJRPG戦闘システムがどのように構成されているかに関するリソースを見つけることができませんでした。私が見つけるのは、損傷の公式についての議論です。私はグーグルを試し、gamedev.netのメッセージボードを検索し、C ++関連の質問をここでStack Exchangeでクロールしました。また、既存のオープンソースRPGのソースコードを読み取ってみましたが、なんらかのガイドがないと、干し草の山から針を見つけようとするようなものです。 D&Dなどの一連のルールは探していません。私は純粋にコードとオブジェクト構造の設計について話しています。戦闘システムは、メニューを使用してプレイヤーに入力を要求します。次に、ヒーローと敵がアクションを実行するときに、バトルターンが実行されます。 誰かが私を正しい方向に向けることができますか?前もって感謝します。
9 c++  2d  architecture  sdl  rpg 

1
私はこのコンポーネントアーキテクチャで正しい軌道に乗っていますか?
私は最近、深いクラス階層を取り除き、構成可能なコンポーネントで置き換えるために、ゲームアーキテクチャを刷新することを決定しました。私が置き換える最初の階層はアイテム階層です。私が正しい方向に進んでいるかどうかを知るためにいくつかのアドバイスをお願いします。 以前は、次のような階層がありました。 Item -> Equipment -> Weapon -> Armor -> Accessory -> SyntehsisItem -> BattleUseItem -> HealingItem -> ThrowingItem -> ThrowsAsAttackItem 言うまでもなく、乱雑になり始めており、これらは複数のタイプである必要があるアイテムに対する簡単な解決策ではありませんでした(つまり、一部の機器はアイテム合成で使用され、一部の機器はスロー可能です)。 次に、機能をリファクタリングして基本アイテムクラスに配置しようとしました。しかし、それから私はアイテムが未使用/余分なデータをたくさん持っていることを指摘していました。現在、私は他のゲームクラスに実行する前に、少なくとも私のアイテムに対して、アーキテクチャのようなコンポーネントを実行しようとしています。 これが、コンポーネントのセットアップについて私が現在考えていることです。 次のようなさまざまなコンポーネントのスロット(つまり、機器コンポーネントスロット、ヒーリングコンポーネントスロットなど、および任意のコンポーネントのマップ)を持つ基本アイテムクラスがあります。 class Item { //Basic item properties (name, ID, etc.) excluded EquipmentComponent* equipmentComponent; HealingComponent* healingComponent; SynthesisComponent* synthesisComponent; ThrowComponent* throwComponent; boost::unordered_map<std::string, std::pair<bool, ItemComponent*> > AdditionalComponents; } すべての項目コンポーネントは基本のItemComponentクラスから継承し、各コンポーネントタイプは、その機能を実装する方法をエンジンに伝える責任があります。つまり、HealingComponentは、アイテムをヒーリングアイテムとして使用する方法を戦闘力学に指示し、ThrowComponentは、アイテムをスロー可能なアイテムとして処理する方法を戦闘エンジンに指示します。 …

2
シームレスMMOサーバーアーキテクチャに関する情報
シームレスMMOサーバーで何か資料を探しています!「Massively Multiplayer Game Development」の本と「Game Programming Gems 5」にいくつかの記事があります。そのトピックについて誰かが経験したり、それについての記事を知っていますか? 「ハイレベルビュー」と実装に興味があります。これが修士論文のテーマになるかもしれませんが、実際に論文を書き始める前に、そのようなシステムを書くのがいかに難しいかを知りたいと思います。今のところ、どの言語を使用するか決めていません。JavaかScalaを考えています。Erlangを選択することもできますが、私はこれで作業したことがありません。 注:基本的な要件は移動です。他のゲームシステムはオプションであり、「ボーナスクレジット」を提供します。 ここで、「シームレスサーバー」とはどういう意味ですか。静的な境界を使用して、すべてのノードがゲームの世界の一部を制御するサーバークラスターを設定します。プレイヤーは、インスタンスを切り替えたり、「テレポーター」を打ったりすることなく、世界の一端から他の端に移動できるようになりました。WoWがそうだと思います。しかし、私のバックエンドでは、プレイヤーはあるサーバーから次のサーバーに移行します。

1
ゲーム開発を教えるために必要な幅広いトピック[終了]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、1つの問題のみに焦点を当てますこの投稿を編集するます。 2年前休業。 近い将来、iPhoneユーザーグループにゲーム開発についてのプレゼンテーションを行う予定です。私の聴衆はiPhone開発者ですが、必ずしも非常に経験豊富な開発者ではありません。これは紹介することを目的としています。 私の質問は、ゲーム開発を理解するためにどのような広範なトピックが必要なのでしょうか?私はこれがかなり主観的であることを認めますが、トピックに興味のある誰もがそれらについて知っているべきであるゲームの十分に広い範囲に当てはまる高レベルのトピックの包括的なリストを本当に望んでいます。これのようなリストを作ろうとするあらゆるリソースへのポインタで私は有頂天になるでしょう。(私は見ましたが、私のgoogle-fuは今夜私を失敗させています。) ここに私がこれまで持っているものがあります: ゲームループ イベント駆動型ゲームに関するサブノート 2Dアニメーション スプライト/テクスチャマップ 3Dアニメーション フレームワークの重要性 モデリングソフトウェア 粒子と粒子効果 ヒット検出 AI 明らかに、私はこれらのトピックすべてを詳細にカバーすることはしません。単に話を終えた後、聴衆が(うまくいけば)与えられたゲームがどのように開発されるかについて頭を包むことができるようにそれらを単に定義するようなものではありません。 何が欠けていますか?

3
Androidスレッドがデザインに頭を悩ませる問題
ゲームデザインに頭を悩ませています。Androidプラットフォームでは、アクティビティがあり、そのコンテンツビューにカスタムサーフェスビューを設定しています。カスタムサーフェスビューがパネルとして機能し、すべてのクラスのインスタンスを作成し、そこですべての描画と計算を行います。 質問:代わりに、アクティビティで他のクラスのインスタンスを作成する必要がありますか? 次に、ゲームループを処理するカスタムスレッドクラスを作成します。 質問:この1つのクラスをすべてのアクティビティでどのように使用しますか?または、毎回拡張スレッドクラスの個別のインスタンスを作成する必要がありますか? 前のゲームでは、スレッドクラスのインスタンスを作成する必要のある複数のレベルがあり、スレッドクラスでは、各個別のレベルにコンストラクターメソッドを設定し、ループでswitchステートメントを使用して、レンダリングする必要があるレベルを確認しましたそして更新。混乱するようでしたら申し訳ありません。 私が使用している方法が非効率的であるかどうか(おそらくそうであるかどうか)と、それを正しい方法で設計する方法を知りたいだけです。私はそこにたくさんのチュートリアルを読みました、そして私はまだこの特定のトピックで多くの問題を抱えています。多分これを説明するいくつかのチュートリアルへのリンク?ありがとう。

4
2Dプラットフォーマーの「時間制御」
プレイヤーがボタンを押してレベルを再開できる2Dプラットフォーマーを作成しています。前のキャラクターだけが同時にレベルを実行します。 他のゲームが以前にこれを行ったことを知っています。私が考えた方法は、ゲームキャラクターに一連のアクション(アイドル、ジャンプ、左歩くなど)を持たせ、それらのアクションの変化を検出してログインすることですゲーム時間と一緒のリスト。そのため、キャラクターが自分でレベルを再度実行する必要がある場合、適切なタイミングでアクションを変更してリストを確認できます。 これはそれを行うための最良の方法ですか?誰かこれについて何か経験がありますか? ありがとう。

3
キャラクター主導のゲームエンジンを、スクリプトやプログラミングを学ぶ必要がないところまで単純化することは良い考えですか?
私は覚えていますし、私はプロトタイプの3Dゲームを作成して、Unityのような巨大なツールを使用したり、広範なC ++プログラミング、デザインパターン、まともなまたは基本的な3Dエンジンなどを知らなければ、単純な動作をテストすることさえできないと思います。 今、私はプログラミングを知っているので、何かを作る方法を知る前にプログラミングを学ぶ必要がある人よりも幸運であるかどうか疑問に思っています。Unityなどのスクリプトエンジンも子供向けではなく、私の感覚では、彼らは物事のやり方を指示する傾向があります。これはOgreやIrrlichtのようなエンジンには当てはまりません。 今、キャラクター主導のゲームがゲーム市場の大きな部分を占めていると思っています。AIの構築のみを可能にし、他を除外するキャラクターコントロール指向のゲームエンジンを作成することは良い考えだと思いますか? プロトタイプとは、シーンマネージャー、プレーヤーのカメラのPOV、コントロール、いくつかの非常に基本的な衝突/物理、統合などの一連のゲームプレイパラメーターからすばやく選択できるという意味で「ジェネリック」も意味します基本的なステアリング(OpenSteerなど)。主なアイデアは、AIサンドボックスを3Dで作成することです。そのため、2Dの制約なしで実証できます(また、2Dではなく3Dプロジェクトの3Dのプロトタイプにより適合させることができます)。

4
更新にターンベース(RPG)ゲームでアイドル時間を使用する
ターンベースのRPGゲームを実行すると、ゲームが「wait_for_player_input」をループしているため、何も起こらない時間が長くなります。当然、この時間を使用して更新するのが賢明なようです。 ただし、これはすぐにスレッド化する必要があることを示唆しているようです。この種の設計は単一のスレッドで可能ですか? loop: if not check_something_pressed: update_a_very_small_amount else keep going しかし、「a_very_small_amount」がループごとに1つのオブジェクトのみを更新していると言うと、更新が非常に遅くなります。 あなたはこれについて、できればシングルスレッドでどうしますか? 編集:私はこの言語にとらわれないタグを付けました。;-) 2番目の編集:このゲームでは、アニメーションコンポーネントを使用する予定はありません。つまり、私は現在、プレイヤー入力待ちとして実行しており、すべてを更新して描画しています。したがって、X FPSではなく、ユーザーの速度に依存します。

3
これはどのようなパターンですか、それを行う必要がありますか?
私はフラッシュ開発とフラッシュcs5を使用してas3でゲームを作っています。すべてがオブジェクト指向です。他のクラスのすべてのインスタンス化へのプロパティ参照を持つ1つの「ゲートウェイ」クラスがあり、このゲートウェイクラスを新しいオブジェクトに渡すだけで、すべてのクラスにアクセスできるのではないかと思っていました。そのようです: var block:Block = new Block(gateway); //In the block class: this.gateway.player.setHealth(100); //Or: this.gateway.input.lock(); これはシングルトンパターンのようなものですか?これを行う必要がありますか?

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

2
イベントでの開発はゲームでどのような役割を果たしますか?
ほとんどのアプリケーション開発はイベントの開発に基づいていますが、ゲーム開発のゲームループスタイルと(多くの場合)高いパフォーマンス/スループットの必要性を考慮すると、イベントを使用した開発にはどのような役割があり、トレードオフは何ですか?しばしば含まれる同期/ロックは、より大きな影響を及ぼしますか? 例:-ネットワーク[レイヤー]は、受信したデータをゲームループにどのように通知しますか?-物理システムはどのように衝突を通知しますか イベントを使ったゲーム開発が厳禁だった時代を思い出すことができるからです。これは変わりましたか?

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