0

次のゲームは自分のシンプルなエンジンを使って作ることにしました。オブジェクト レンダリングや物理演算などのコードを既にいくつか書いていますが、今はそれらを簡単に接続する方法を考えています。

私は1つのマスターオブジェクトで階層構造を作りたいと思っています.SpritesまたはInteractiveObjectsとして親を持つSceneと呼びましょう。すべてのSpriteまたはInteractiveObjectは、独自の子を持つ独自の子を持つことができます..あなたはすでにここで私のポイントを得たと思います: )

すべてのオブジェクト タイプが何らかのベース オブジェクトから継承されると仮定しましょう。たとえば、それを Node と呼びましょう。ノードがサイズ、位置などを持つ「実際の」オブジェクトになるのか、それともゲーム内のすべてのオブジェクトの抽象ラッパーのみになるのかはまだわかりません (実際にはオプション 2 を使用する傾向があります)。

そして最後に。私の目標は、実際のシーンのオブジェクトを取得し、Scene->Move(x,y) のようなものを呼び出して、Scene (または Sprite、InteractiveObject など) のすべての子を移動することです。または Scene->Render() で、すべての (レンダリング可能な) 子をレンダリングします。スプライトを作成する場合、Sprite->addChild() のように子を追加したいと思います。子は、別のスプライト、InteractiveObject、または単純なノードにすることができます。

そして今、私の質問です。C ++で実装する最良の方法は何ですか? それとも私は完全に間違っていて、この構造はばかげていますか? :)

4

1 に答える 1

0

構造が適切かどうかは、実際に何を達成したいかによって決まると考えるべきです。システムは非常に柔軟に見えますが、通常、柔軟性とパフォーマンスの間にはトレードオフがあります。ゲームのジャンルによっては、パフォーマンスが十分に得られない場合があります。

また、すべてのものがある BaseNode から派生する場合、実際にレンダリング、移動などができるかどうかにかかわらず、すべての種類のものに対して (空の可能性がありますが) メソッドが必要です。どちらもとてもいいです。したがって、柔軟性をやや低くして、ゲーム エンティティとグラフィック エンティティを区別し、後者を前者の一部にする方がよい場合があります (ゲーム エンティティを複数のグラフィック エンティティまたはサブエンティティから構成できるようにすることもできます)。けれど)。

現在のアーキテクチャを使用する場合、各 BaseObject にはベクトルのようなものがあり、マスター オブジェクトで render() を呼び出すと、すべての子を通過し、render を呼び出すと考えるべきです。同じことを行い、適切なレンダリング コードを実行します。

ただし、別の問題は、オブジェクトを他の複数のオブジェクトに適切に接続できるかどうかです (たとえば、レンダリングと物理学に違いがある場合)。その場合、単純な BaseObject* を使用せずに、何らかの形式の auto_ptr または shared_ptr を使用しない限り、オブジェクトを削除するタイミングを知るのは難しい場合があります。

この回答が少しでもお役に立てば幸いです。1。

于 2012-07-19T10:58:47.927 に答える