SimpleZSorter その2
2008/11/10 21:27 - Astro
FlashPlayer10 のネイティブ 3D にZソートを付加するとっても便利なクラス、SimpleZSorter について、もちっと試してみました。
前回は、このクラスを使えば、Papervision3D 的な階層構造で回転動作がおこなえる、しかも親と子の2階層だけでなく、孫階層、曾孫階層と多重階層構造を採っていてもオッケーっぽい、ということを書きましたが、、いろいろ試した結果、そうは問屋が卸さないのではないか、ということが分かりました。
制限(1) 階層におけるオブジェクトコンテナの数
SimpleZSorter は親、子、孫、曾孫という多重階層構造を許しますが、各階層において DisplayObjectContainer は1個しかその存在を許さないようです。
下記の<異常>のように、親と子の二階層で、子に複数のコンテナを用意し、それぞれのコンテナに孫として表示オブジェクトを配置した場合、正常なZソートがおこなわれませんでした。
<正常> <異常> root root ├┬┬┐ ├────┬────┐ cooo c c c ├┬┬┐ ├┬┬┐ ├┬┬┐ ├┬┬┐ cooo oooo oooo oooo ├┬┐ ooo (c:DisplayObjectContainer、o:DisplayObject)
制限(2) 異なるコンテナにおけるオブジェクトの座標
制限(1)を満たしていても、まだZソートが正常に動かない場合がありました。
上記の<正常>な例では、ひとつの同心円上に並んだ矩形平面は同じコンテナに addChild されています。 そして同心円ごとにひとつのコンテナが用意され、外側になるほど祖先コンテナ、内側になるほど子孫コンテナという構成になっています。
これを逆に、内側になるほど祖先コンテナ、外側になるほど子孫コンテナという配置にするとZソートが正常に働きません。
万能というわけにはいかぬようです。 使い所がけっこうムズいかも。
掲示したソースはすべてドキュメントクラスです。 それ以外のクラスファイルは前回のソースと同じ。