2004/12/21 | _level16394
类别(Actionscript) | 评论(1) | 阅读(90) | 发表于 02:23
使用MovieClipLoader类,如果在加载swf过程中,调用unloadMovie(),会触发MovieClipLoader的onLoadError事件。onLoadError方法会有一个target参数返回,这个参数的值在这个时候是:_level16394,typeof 得到是"movieclip",奇怪的是,这个movieClip根本不是原来指定的target,他是一个没有任何方法和属性的一个怪MovieClip:
_parent=undefined;
_x=undefined;
_y=undefined;
.
.
.

如果要测试 getDepth() 取得他的图层的话,会让你的flash死机!!!

如果有兴趣的话,请测试以下代码:

var loader = new MovieClipLoader();
_root.createEmptyMovieClip("pic1", 10);
loader.loadClip("照张稍大的图片", _root.pic1);
var o = {};
o.onLoadError = function(target, errorCode) {
    trace(target instanceof MovieClip);
    for (var i in target) {
        trace(i);
    }
    trace(target);
//trace(target.getDepth()) <--这个语句会让你的flash死掉
};
o.onLoadProgress = function(target) {
    target.unloadMovie();
//target.removeMovieClip();//会有同样的效果。
};
o.onLoadComplete = function() {
    trace("okok");
};
loader.addListener(o);

actionscript很多东西都让人觉得设计的莫名其妙。MovieClipLoader 类提供了一些mc.loadMovie()所没有的功能,但是unloadMovie()会调用onLoadError本身就值得考虑,更何况是返回一个根本就不知道是什么MovieClip。
unloadMovie()方法本身和removeMovieClip()还是有区别的,removeMovieClip()会从场景里面去掉,而unloadMovie()方法不会删除movieClip,只会移除movieClip里面的内容。
要我说,好的设计应该是:
在onLoadError(target,errorCode)这个事件中,如果中途unloadMovie()发生,应该返回的target还是指定的movieClip,因为这个movieClip还在场景,如果是removeMovieClip()发生的话,应该返回undefined,因为他已经被移除。而应该在errorCode中返回"LoadTerminated"(现在这两种情况返回的是"LoadNeverCompleted",和连接过程中网络断掉是一样的)。

不过返回一个怪东西起码还能判断这个error是怎样产生的。
0

评论Comments