2010-11-27 11 views
2

これはあいまいな質問ですが、私には負担してください。私はPython/PygletとOpenGLを使ってゲームを書く過程にあります。私は現在、「ワールド」と呼ばれるオブジェクトが存在するように構造化しています。他のオブジェクトが内部にあるオブジェクトなどです。このようにしました。たとえば、ゲームの一部が他のオブジェクトを持つプラットフォームであり、私がプラットフォームを傾けると、その上にあるオブジェクトをそれに合わせて欲しいと思っています。ですから、glRotate、glTranslateを呼び出すplatform.draw()を実行し、モデルビュー行列を保存している各オブジェクトを描画します。このようにして、プラットフォーム上のすべてのオブジェクトが一緒に移動します。 最初の質問は、これを物事を整理するための賢明な方法ですか、それとも他の方法を使用するべきですか?3Dゲームの構造を整理するには?

私はカメラクラスを持っていませんが、現在私は動きの錯覚を与えるために世界全体または一部を翻訳しています。しかし、将来、私はオブジェクト間の視点を切り替えることができるようにしたいと考えています。例えば、上から見下ろすことから上の世界へのオブジェクトの1人目のビューへの切り替えです。したがって、2番目の質問は、これが今後達成されるように私のプログラムを構築する最良の方法は何ですか?

答えて

1
おそらく

ない完全な答えは、しかし、私は、完全な1が一冊の本を取ると思います...あなたは、階層内の世界のあなたの表現でやっている

が通常として知られているものと非常によく似ています「シーングラフ」と呼ばれ、多くの場合には良いアイデアです。これを正確に行うライブラリの良い例は Open Scene Graphです。

「世界の翻訳」について、毎回すべての頂点を実際に変換しない限り、それは完璧です。それは単に相対的な視点の問題であり、実際にはカメラマトリックスと同じものです。あなたは、世界にカメラを置くか、カメラの前で世界を動かすような変形を見ることができます。

+0

問題は、私は私の世界でのオブジェクトのいずれかで何かをしたいときに私はworld.object1.object2を行うには持っていますということです。 object3.do_something()、少し醜いです。私はまた、世界の残りの部分へのポインタを各オブジェクトに渡す必要があります。これは実際には大きな問題ではありません。 – eggbert

0

ロジックを別々のモジュールに入れることも、別々のクラス/関数に組み込むこともできます。 私の2D-Gameでは、特定のイベントのメソッドの登録やスケジューリングを簡略化する(および登録解除+スケジューリングを解除する)ためのGameLogicクラスがあり、単純な新しいスタイルのオブジェクトをそのための状態記憶領域として注入する@state_wrapperデコレータを作成しました方法。あなたがあなたの世界のオブジェクトすべてにポインターを渡す必要がないのが好きなら、イベントメソッドだけがあなたのオブジェクトにアクセスする必要があります。

しかし、私はこれが最善の解決策であることを主張しません。)

関連する問題