[Progression 4]SceneLoader
今まで使う機会がなかったのでスルーしていたSceneLoaderクラス
基本的には他のProgressionのSWFを読み込んでそのままシーンの遷移が使えるというものですが、なんかわかりやすい解説が見つからなかったし、いくつか注意点もあるのでまとめてみる。
ProgressionによるFlashコンテンツ開発ガイドブックにもサンプルとなるコードはありますが、少し違う形で説明します。
今まで使う機会がなかったのでスルーしていたSceneLoaderクラス
基本的には他のProgressionのSWFを読み込んでそのままシーンの遷移が使えるというものですが、なんかわかりやすい解説が見つからなかったし、いくつか注意点もあるのでまとめてみる。
ProgressionによるFlashコンテンツ開発ガイドブックにもサンプルとなるコードはありますが、少し違う形で説明します。
ApplicationDomain
前の続き。
珍しく調べちゃいました。
といっても、ActionScript 3.0 のプログラミング を調べただけですが、簡単にまとめると下記の感じかな。
context.applicationDomain = new ApplicationDomain();
これは前のエントリと同じ指定。
これだと、親と子で同じクラス名で動作が違うとかでも共存できます。
context.applicationDomain = ApplicationDomain.currentDomain;
この指定の場合は、親にないクラスが子にあった場合は追加され、その追加されたクラスは親からでも使える。(詳細)
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
親と子でクラス名が重なる場合、親のものが使用される。
子のクラスを親は使えない。
これが何も指定しない場合と同じ状態な気がします。
こんなところでしょうか。
なんの打ち合わせもなく複数人でSWF制作したときなんかは、1の指定をしておいたほうがトラブルは回避できそうですね。
問題の発覚から解決まですべてをエントリするので、無駄に長いです。
親SWFから子SWFを読み込むFlash(だから、親子なんだけども)
当然、親と子のSWFを別々に制作するわけですが、
それぞれのSWF自体の動作は確認して完成!と思っていたら
どうも親から読み込んで表示したときの子SWFの動作がおかしい。
原因はライブラリに登録してあるMCのクラス名がかぶっていて、親と子でほぼ同じ動作なんだけど、微妙に違うっていう感じだったので、制作のときは同名のクラスをそれぞれ別のasファイルを参照するようにしていたんですが、親からLoader使って子SWFを読み込んだときだけ親クラスと同じ動作をして困った。
まぁ、こうなるんだろうから、これがFlashの仕様なんだろうけど、これがどういう仕組みなのかさっぱりわからない。
簡単に解決するなら、親か子のどちらかのクラス名を変えてやるだけです。
また、頭のいい人はどちらでも動作するようなコードを書けるんだと思います。
(今回のクラスの場合は、ROLL_OVER時に親SWFのドキュメントクラスにあるfunctionを呼び出していただけなんですが、当然、親と子では親にあるfunctionへのアクセス方法が変わる。なので、なんか頭いいコードで回避できる方法もあるのかもしれないけど、自分にはわからん!)
続きに解決編。