Превращение содержимого загрузчика в MovieClips в AS3 - PullRequest
0 голосов
/ 03 июля 2011

Итак, вот загрузчик, который работает:

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]);
            }
}

Все фантастически, супер-пупер, классно. Но когда я добавляю несколько строк для обработки содержимого загрузчика как мувиклипа (чтобы я мог применить к нему функцию stop()), компилятор превращается в ошибку. Все мои красивые внешние SWFs исчезают. Новые строки внизу с комментариями:

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, поэтому я не включил его в свой код. Это не проблема в первом конде

1 Ответ

3 голосов
/ 03 июля 2011

Похоже, вы не даете загрузчику возможности загрузить что-либо, поэтому loaders[i].content равно нулю.

Прослушайте событие полностью, прежде чем пытаться получить доступ к содержимому загрузчика. Поскольку вы используете несколько загрузчиков, вы также должны назначить каждому загрузчику имя экземпляра, используя 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;
}
...