Metasequoiaクラス改造論(1) 階層構造の再現
Metasequoiaは、バージョン2.4から、オブジェクトの階層化に対応した。そこで、Metasequoiaクラスもオブジェクトを階層化してみよう。幸い、Papervision3D(と言うかFlashそのものが)、木構造でデータを保持するので、これを利用すればいい。
つまり、今までは単一のMetasequoiaインスタンスに全てのオブジェクトを放り込んでいたのを、オブジェクトごとに内部でMetasequoiaクラスを生成し、addChildしていけばよいのだ。
ちなみに、完成品はMQOViewerに使用してある。
階層構造の構築
Metasequoiaのファイルフォーマットだと、階層構造で親になるObjectは、自分より前にいることになる。つまり、パース済みのObjectチャンクの中に親があるのだ。具体的に言うと、自分より先にパースされたオブジェクトは、以下の3つのうちどれってこと。
- 自分の親Objectである
- 自分の兄弟Objectである
- 自分の兄弟Objectの子である
なので、Metasequoiaクラスをこんな風に実装すればよいはずだ。
- mqoファイルをロードするMetasequoiaインスタンスをrootとする。Objectチャンク内の全Objectはその子
- rootは、mqoファイル内の全Objectの一覧を持つ
- 新しいObjectチャンクをパースする際に、一覧から親を探す
Metasequoiaのファイルフォーマットによれば、階層構造はObjectチャンクのdepthチャンクで表現されるとある。そこで、Objectチャンクの読み込み時にdepthを読み込み、それを元に階層構造を決定して、それにあわせてaddChildを使って階層構造を実現していくと言うことにしてみる。