Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как добавить потомка в Loader для загрузки нового контента (http://www.flasher.ru/forum/showthread.php?t=100037)

: hr : 17.08.2007 19:39

Как добавить потомка в Loader для загрузки нового контента
 
Друзья, подскажите пожалуйста... После загрузки контента в экземпляр класса Loader, присоединяю содержащийся в нем DisplayObject в другое место:
Код:

import flash.display.*;
import flash.net.URLRequest;
import flash.events.Event;
var container:Sprite = new Sprite();
addChild(container);
var pictLdr:Loader = new Loader();
var pictURL:String = "banana.jpg";
var pictURLReq:URLRequest = new URLRequest(pictURL);
pictLdr.load(pictURLReq);
pictLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, imgLoaded);
function imgLoaded(e:Event):void
{
container.addChild(pictLdr.content);
}

дальше хочется загрузить с помощью этого Loader'а еще один элемент контента (картинку скажем). Но ведь содержащийся в Loader'e DisplayObject я "отсоединил", о чем при попытке повторной загрузки свидетельствует соответствующая ошибка:
Код:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller.
. Но если я попытаюсь присоединить к Loader'у новый child (DisplayObject, конкретно например Sprite), он ругается, мол
Код:

Error #2069: The Loader class does not implement this method.
- речь идет о методе addChild.
Вопрос - что Loader только на одну загрузку? Или что я не верно делаю?

etc 17.08.2007 19:44

А размер шрифта в единичку и код в одну строчку специально был написан, чтобы не смогли разобрать?

: hr : 17.08.2007 19:50

ну я ж поправил! :) По существу пожалуйста, по существу... :)

etc 17.08.2007 19:52

Поправил я.

Я что-то очень сомневаюсь, что из loader можно так просто выдернуть его контент. Более того, нужно хотя бы попробовать
Код:

var content:DisplayObject = loader.content;
loader.removeChild(content);

, прежде чем аттачить в свой контейнер.

: hr : 17.08.2007 20:04

а я и не хочу из loader'а выдерать контент - пущай будет, его все равно в display list у меня нет, Но! ежели после
Код:

container.addChild(pictLdr.content);
попытаться вновь воспользоваться loader'ом - будет:
Код:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller
, что наводит на мысль что контент выдернут. Или я тогда не понимаю в чем проблема. Исходник класса выложить?

__i 17.08.2007 20:08

а почему тебе не создавать отдельный лоадер на каждую загрузку? лоадер по сути сам предаствляет дисплей обджект который атачиться на сцену. ну или просто атачить контент, потом делать лоадер=нул и создавать новый .

etc 17.08.2007 20:09

Цитата:

Сообщение от : hr :
а я и не хочу из loader'а выдерать контент - пущай будет, его все равно в display list у меня нет, Но! ежели после
Код:

container.addChild(pictLdr.content);
попытаться вновь воспользоваться loader'ом - будет:
Код:

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller
, что наводит на мысль что контент выдернут. Или я тогда не понимаю в чем проблема. Исходник класса выложить?

Так нельзя, один объект не может находится в двух разных display list.
Исходник не помешает, клепать тестовый проект лень очень :)

: hr : 17.08.2007 20:34

Вложений: 1
Цитата:

клепать тестовый проект лень очень
понимаю :) файл приложен

Код:

loader.removeChild(content);
не работает, выдает
Код:

Error #2069: The Loader class does not implement this method.
Цитата:

а почему тебе не создавать отдельный лоадер на каждую загрузку?...
__i, это вариант. Так и сделаю на крайний случай, но смущает наличие 2-х DisplyaObject вместо одного и как-то начал делать по такому пути, хочется теперь уж разобраться :)

EugeneLitvinov 08.07.2008 17:33

Такая же точно беда была... нужно было загрузить n-файлов. Поборол тем, что перед каждой загрузкой заново пересоздаю лоадер:
Код:

var parts: Array; // содержит список загружаемых файлов

public function downloadPart(): void
{
  loader = new Loader();
  loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, eventProgress);
  loader.contentLoaderInfo.addEventListener(Event.COMPLETE, eventComplete);
                       
  if (parts.length > 0)
  {
    loader.load(new URLRequest(parts.pop()));
  }
  else
    // загрузили все файлы
}

А на Event.COMPLETE вешаю вызов функции downloadPart() - такая вот рекурсия :)


Часовой пояс GMT +4, время: 07:36.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.