(AS2)Delegate 类的一个奇怪问题 |
| 作者:佚名 来源:不详 更新:2007-1-13 20:36:26 错误报告 我要投稿 |
今天发现一个奇怪的问题,使用 AS2 中的 Delegate 居然转两次会出现问题。目前还不是很清楚是代码上的问题还是 Flash 自身就有这个问题。先贴上来标注一下。 首先是做一个 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(); | 最初的设想是依次要输出这些内容:
结果,却显示这样的信息:
具体原因不明。先作个记号,以后解决了再贴上来!
(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); } } |
|
|
| 文章录入:skyuu 责任编辑:skyuu |
|
| 【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】 |