AS3.0で親swfが子swfを読み込む作りになっている場合起きる不具合を発見。
このような作りは定番パターンなのでクラスベースで制作している人は要注意です。逆にタイムラインベースの人はまず影響ないと思うのでスルーして問題なさそうです。
クラスベース制作をされている方はドキュメントクラスを指定するかと思いますが、上記のような構造の場合、子swfにドキュメントクラスを指定して、親swfからそのクラスを参照すると、子swfのフレームスクリプトが動作しなくなります。
詳しくは下記コードを参照。
package
{
import flash.display.Loader;
import flash.display.MovieClip;
import flash.events.Event;
import flash.net.URLRequest;
/**
* 親swfのドキュメントクラスです。
* @author Ks-Product.com
*/
public class Parent extends MovieClip
{
public function Parent()
{
var l:Loader = new Loader();
l.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
l.load(new URLRequest("child.swf"));
}
private function completeHandler(e:Event):void
{
//この部分を実行することで、子swfであるchild.swfのフレームスクリプトが動作しなくなる。何故?
trace(e.target.content is Child)
//以下のようなコードでも同様の現象が発生
//trace(Child);
//trace(Child(e.target.content));
//trace(Child.getInfo());
}
}
}
package
{
import flash.display.MovieClip;
/**
* 子swfのドキュメントクラスです。
* @author Ks-Product.com
*/
public class Child extends MovieClip
{
public function Child()
{
}
//動作確認用メソッド
public static function getInfo():String
{
return "class : Child";
}
}
}
一応サンプルを用意しました。
child.swf にフレームスクリプトが書かれているので
本来は"This class name is Child."と出力されるはずなのですが、
上記の記述のせいで出力されません。
これは仕様なのかはたまたバグなのか。
精通されている方はコメントして下されば幸いです。



コメント(0)
コメントが存在しません。