ActionScript3アニメーション

「ActionScript3アニメーション」という本を本屋でみて、気に入ったので思い切って買いました。すげぇ高かったけど。

この本のいいところは、ちゃんと「グラフィカルな部分のロジックを文章で説明している」ところ。
実際のところ、巷のFlash本は初心者相手と見ているのか、画面写真でみせるタイプが多い。
これじゃFlexから入る人にはわからない。

かといって、Flex本も、いまのところそれほどいい本はないように思います。
こっちはその辺気を使って文法的なところとか書いてるけど、あまりにもFlexが多機能すぎるせいで、それらの紹介に終始しているような…。
Flashそのものまで詳細に説明し始めると、どう考えてもページが足りなくなるんですよ。
アドビも、そろそろFlashPlayerそのものの解説本を出すべきじゃないのかなぁ。
マイクロソフトWindowsの解説本を出してるみたいに。ゴツいのをどかーんと。

で、気になったのが41ページの記述。

実際には削除する必要すらありません。なぜなら子は親を一つしか持つことは出来ないので、別の親に子を追加すると子は自動的に最初の親から削除されるのです。

秋葉原からの帰りのカフェでこの記述を目にして「しょ、しょんなバカなぁ〜!」と激しく動揺した僕は、そのまままっすぐ家に帰ってテストプログラムを組んでみたわけです。


その結果、「半分本当」という結論に達しました。


基本的にSpriteの場合は、本の記述の通り、親Aの子をそのまま親BにaddChildすると、親Aからはキレイにremoveされるようです。
しかし、Flexで一般に親として用いるContainerの派生クラス(子がIUIComponentでなければならないもの)については、削除時になにか情報が残っているようで、いったん削除した親にもう一度戻す際にエラーが発生しました。
このことを見る限り、Flexフレームワークについては、必ずしも約束された機能ではないようです。


ついでの話ですが、Flexコンポーネントの削除について気になっている点です。
popupButtonがpopupを閉じかけているとき(つまりCloseのエフェクトが走っている状態)、popupButtonあるいはその親を不用意にremoveChildするとコケるようです。
これに限らず、removeChildの前には、子の中でエフェクトが走っているかどうかを確認したほうがいいのかもしれません。