首先是做一个 MC 的 Loading 类,使用 MovieClipLoader 对象。类代码如下:
| import mx.utils.Delegate; class CLoad { private var my_lc:MovieClipLoader; public function CLoad() { // 构造函数 } public function loadMovie(path:String, mc:MovieClip):Void { var obj:Object = new Object(); obj.onLoadComplete = Delegate.create(this, onLoad); my_lc = new MovieClipLoader(); my_lc.addListener(obj); my_lc.loadClip(path, mc); } public function onLoad(mc:MovieClip):Void { trace("yes"); } } |
单独测试这个类,外部使用 Delegate 重写这个 onLoad 方法,一切正常。
接下来编写另一个类,在类中调用 CLoad 类,结果就出问题了,类代码如下:
| import mx.utils.Delegate; import CLoad; class TestLoad { private var lc:CLoad; public function TestLoad(path:String, mc:MovieClip) { lc = new CLoad(); lc.loadMovie(path, mc); lc.onLoad = Delegate.create(this, onLoadC); trace("Start"); } private function onLoadC(mc:MovieClip):Void { trace("load : "+mc); } } |
新建一个 Flash 文件,在第一帧写上如下代码:
| import TestLoad; var mc:MovieClip = _root.createEmptyMovieClip("mmc",1); var m_lc:TestLoad = new TestLoad("test.swf", mc); stop(); |
最初的设想是依次要输出这些内容:
| Start load : _root.mmc |
结果,却显示这样的信息:
| Start yes |
具体原因不明。先作个记号,以后解决了再贴上来!
(8 月 10 日补充)
经过反复测试,最后终于让我找到原因,原来是将事件定义放在了 LoadMovie 动作的后面,所以就无效了,将其反过来就 OK 了。
| import mx.utils.Delegate; import CLoad; class TestLoad { private var lc:CLoad; public function TestLoad(path:String, mc:MovieClip) { lc = new CLoad(); lc.onLoad = Delegate.create(this, onLoadC); lc.loadMovie(path, mc); trace("Start"); } private function onLoadC(mc:MovieClip):Void { trace("load : "+mc); } } |
