2011-12-06 8 views
2

コンポーネントベースのゲームアーキテクチャに関するWeb上で多くの記事を読んでいるので、このアーキテクチャをテストするためのシンプルなシステムを実装することに決めました。コンポーネントベースのゲームエンジンでコンポーネントを特定する

私は一般的なゲームノードを実装しました。これは、コンポーネントの基本的なリストと、そのようなコンポーネントの追加と削除のためのいくつかの方法だけです。私はまた、それらの間のコミュニケーションを促進するために、特定のノードに属するメッセージのリストを持っています。

この例では、銃を所有しているボット(ちょうど基本的な「ガンガン」と統計情報が異なる派生型があります)があり、それらはお互いに射撃し、その結果をコンソールに出力します。そのうちの1人が相手を射撃するたびに、MSG_SHOTコードと被害額を引数としてメッセージが後者のリストに掲載されます。これは問題なくOKです。

しかし、私はいくつかの銃に「スコープ」を追加して、そのダメージを2倍にすることに決めました。しかし、実際に反復することなく、その子供の1つが範囲であるかどうかを武器が確認する方法を見つけることはできませんでした。いくつかの基本的な解決策がありますが、私は一般的なものを目指しています(スコープフィールドを銃に追加するのではなく、スコープがない場合はnullのままにしておきます)。銃にさまざまな影響を与える無数の銃器をつけたいのであればどうでしょうか?私はそれらを私の銃の部品の「シュート」方法にどのように影響させることができるでしょうか?

「射撃」が呼び出されたときに、すべての銃の子供を反復して、射撃に影響を与えることができるかどうかを確認する必要がありますか?私は、コンポーネント名に頼ることが良いとは思わない。たぶん私は、スコープが利用可能なときに特定の効果を望むかもしれませんが、特定の種類のスコープに対してはファンシーなものを必要とします。あなたが持っている詳細と:(

+0

ノードのツリーを特定の型で検索し、最初の結果を返す単純なクエリ関数を追加しました。そうでない場合はnullを返しました。これまでかなりうまくいきます。それ以外のメッセージシステムは正常に動作しているようです。ノードのメッセージ送信機能は、そのプロジェクトの受信者が存在する場合は結果ジェネリックオブジェクトを返し、そうでない場合はnullを返します。この解釈に重大な問題はありますか? –

答えて

1

...任意のポインタを事前に

おかげで、はい、私はこれを投稿する前に記事/質問のトンを読んだ、と私はまだ、悲しいことに、混乱していますセットアップを私に与えられ、これは私が持っているものですが、それは私があなたのレイアウトを誤解のように聞こえる場合は拡大してください。

計算は、オブジェクトに関連するが、そのオブジェクト内で行う必要があります。

をそうに... ''撃つ 'が呼び出され、銃声に影響を与えることができるかどうかを確認するだけで、すべての銃の子供たちを繰り返すべきですか?はい、範囲銃の損傷出力に影響を与え、メッセージが送信される前に銃側で作業を行う必要があります。私は情報が銃からその添付ファイルのそれぞれに渡される何らかの種類の 'CalcDamageDelt'でセットアップを見るでしょう。

ガンの出力が計算されると、結果がパッケージ化されて受信機に送信されます。レシーバは、ダメージに対する抵抗値(アーマー値)を計算し、結果を適用します。

あなたからのコメントは、あなたが行ったルートだと思いますが、ボーダーではなく、よりユニークなアプローチ(帰ってきたかどうかはわかりません)があります。だから私はあなたが良い方向に進んでいると思います。

+0

返信いただきありがとうございます! :Dまあまあ、リターンは、 "ねえ、あなたが私を打つ"やステータスオブジェクトや何かのような文字列のようなものを返すことができます。これらの小切手の余分なオーバーヘッドについて心配すべきですか?銃が本当に複雑で、子供がたくさんいる場合はどうすればいいですか?スコープなどを調べるためには、すべてをループする必要がありますか?それは私のゲームのパフォーマンスに影響しませんか?これは、ほとんどの「通常の」直接的な階層的アプローチでは、基本的にif(scope!= null){...}のようなO(1)操作になります。 –

+0

もう一つの実用性の問題 - 単位オブジェクトは常に 'stats' 、box2dとgraphicsスプライト1これらのフィールドには多くの対話とクエリが必要ですが、参照を追加するのは悪い習慣ですか?ああ、別の問題が発生する - 私は 'ただのコンポーネント'と実際のエンティティを区別する必要がありますか? 'unit'や 'player'オブジェクトなどのエンティティにもっと寛大なルールを適用するように、直接参照のようなものを制限的な 'children'配列とは別に許可しますか? –

+0

私はスコープ部分について何を言っていたのだろうと思うのは、ガンコンポーネント内にスコープを必要とする計算をしようとすることです。 100個ものものをループすることは、フレームチェックごとではなく、トリガー計算上であれば長い時間がかかりません。スコープをチェックするために外部アイテムが必要な場合は、私はあなたのアプローチに行き、おそらく銃にスコープを持ち、結果をキャッシュすることができると知っているでしょう。 – TurqMage

関連する問題