将加载程序内容转换为AS3中的MovieClip

时间:2011-07-03 00:18:59

标签: actionscript-3 flash compiler-errors loader

所以这是一个有效的加载器:

public var loaders:Array = new Array();
public var loaderClip:Array = new Array();
    function loadPersonmenu() {

        var person:Array = new Array();
        var url:Array = new Array();
        var cityUrl:Array = new Array();

        for (var i = 0; i < personNumber; i++) {
            loaders.push(new Loader());
            loaders[i].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
            loaders[i].addEventListener(MouseEvent.MOUSE_OVER, lightUp);
            person.push("person" + i + ".swf");  
            url.push(new URLRequest(person[i]));
            loaders[i].load(url[i]);
            loaders[i].x = ((i + 1) * margin) + (i * videoWidth);
            loaders[i].alpha = .5;
            container.addChild(loaders[i]);
            }
}

一切都很棒,超级棒,真棒。但是当我添加一些行来将加载器内容视为MovieClip时(所以我可以将stop()函数应用于它),编译器会爆炸成错误节日。我所有漂亮的外部SWF都消失了。新行位于底部,附加注释:

public var loaders:Array = new Array();
public var loaders:Array = new Array();
    function loadPersonmenu() {

        var person:Array = new Array();
        var url:Array = new Array();
        var cityUrl:Array = new Array();


        for (var i = 0; i < personNumber; i++) {
            loaders.push(new Loader());
            loaders[i].contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorListener);
            loaders[i].addEventListener(MouseEvent.MOUSE_OVER, lightUp);
            person.push("person" + i + ".swf");  
            url.push(new URLRequest(person[i]));
            loaders[i].load(url[i]);
            loaders[i].x = ((i + 1) * margin) + (i * videoWidth);
            loaders[i].alpha = .5;
            container.addChild(loaders[i]);
            loaderClip[i] = MovieClip(loaders[i].content); // Here is a new line
            loaderClip[i].stop(); // Here is another new line
        }
}

这些是我的错误:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
  at Menu/loadPersonmenu()
  at Menu/fileCompleteListener()
  at flash.events::EventDispatcher/dispatchEventFunction()
  at flash.events::EventDispatcher/dispatchEvent()
  at flash.net::URLLoader/onComplete()

奇怪的是,我的函数fileCompleteListener()甚至没有引用任何这些Loader实例或SWF,这就是为什么我没有将它包含在我的代码中。这不是第一个conde中的问题

1 个答案:

答案 0 :(得分:3)

您似乎没有给加载程序加载任何东西,因此loaders[i].content为空。

在尝试访问加载程序内容之前侦听complete事件。因为您使用多个加载器,所以您还应该使用i为每个加载器分配一个实例名称,以便您可以使用一个通用的完整侦听器并引用加载程序名称以将内容分配给正确的loaderClip索引。

//in the loop
loaders[i].name = i;
loaders[i].contentLoaderInfo.addEventListener(Event.COMPLETE, loadCompleteHandler);

//////////////////////////////////////////////////

//complete handler method
private function loadCompleteHandler(evt:Event):void
{
    var index:int = int(Loader(LoaderInfo(evt.target).loader).name);
    loaderClip[index] = LoaderInfo(evt.target).content;
}