仕事でClassに関してかなりはまったのでメモ。
状況としては外部SWFにリンケージされているクラスを、親swfで生成(new)するという感じ。
こんなことは出来ないと、端から決めてかかってたんだけどできた。
(こういう状況ってそんなにあるのかな?)
まずsub.swfには、ライブラリにMCが入っていてclasses.MyClassというリンケージIDが着いている。
ここですごい疑問が。
ライブラリに入ってるだけの状態で外部as(classes/MyClass.as)がコンパイルされんのか?ということ。
sub.swf(Sub.as)の冒頭でまずインポート。
そしてコンストラクタで って書いておけばコンパイルされるらしい。(実際される)
あと、こういうケースではgetDefinitionByName()というものを使ってクラスを読み込む。使い方は↓こんな感じ。 文字列からClassを参照できるというもの。
これで出来るんじゃねーかと思ったら、ここですげー罠にはまって数時間格闘、、俺の時間を返せ!
これで読み込もうとしたら「MyClassは定義されていない」って怒られた。
もっと「こうしたら良いんじゃねー」的なアドバイスが欲しい。
で実際どうするかというと、main.swf(Main)の、sub.swf(Sub)を読み込むLoaderにLoaderContextというのを設定する。
↓LoaderContextの設定をする
↓Loaderの第二引数にLoaderContextを設定する
この辺まだあんまり理解できてない、、
とりあえず読み込んだswfのClassを使えるようになる。
→ ソース
状況としては外部SWFにリンケージされているクラスを、親swfで生成(new)するという感じ。
↓図解
こんなことは出来ないと、端から決めてかかってたんだけどできた。
(こういう状況ってそんなにあるのかな?)
まずsub.swfには、ライブラリにMCが入っていてclasses.MyClassというリンケージIDが着いている。
ここですごい疑問が。
ライブラリに入ってるだけの状態で外部as(classes/MyClass.as)がコンパイルされんのか?ということ。
sub.swf(Sub.as)の冒頭でまずインポート。
そしてコンストラクタで って書いておけばコンパイルされるらしい。(実際される)
あと、こういうケースではgetDefinitionByName()というものを使ってクラスを読み込む。使い方は↓こんな感じ。 文字列からClassを参照できるというもの。
これで出来るんじゃねーかと思ったら、ここですげー罠にはまって数時間格闘、、俺の時間を返せ!
これで読み込もうとしたら「MyClassは定義されていない」って怒られた。
もっと「こうしたら良いんじゃねー」的なアドバイスが欲しい。
で実際どうするかというと、main.swf(Main)の、sub.swf(Sub)を読み込むLoaderにLoaderContextというのを設定する。
↓LoaderContextの設定をする
↓Loaderの第二引数にLoaderContextを設定する
この辺まだあんまり理解できてない、、
とりあえず読み込んだswfのClassを使えるようになる。
→ ソース
leave comment