Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 17.08.2007, 19:39
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 1  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 289
По умолчанию Как добавить потомка в 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 только на одну загрузку? Или что я не верно делаю?


Последний раз редактировалось : hr :; 17.08.2007 в 19:43.
Старый 17.08.2007, 19:44
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 2  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
А размер шрифта в единичку и код в одну строчку специально был написан, чтобы не смогли разобрать?

Старый 17.08.2007, 19:50
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 3  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 289
ну я ж поправил! По существу пожалуйста, по существу...

Старый 17.08.2007, 19:52
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 4  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Поправил я.

Я что-то очень сомневаюсь, что из loader можно так просто выдернуть его контент. Более того, нужно хотя бы попробовать
Код:
var content:DisplayObject = loader.content;
loader.removeChild(content);
, прежде чем аттачить в свой контейнер.

Старый 17.08.2007, 20:04
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 5  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 289
а я и не хочу из loader'а выдерать контент - пущай будет, его все равно в display list у меня нет, Но! ежели после
Код:
container.addChild(pictLdr.content);
попытаться вновь воспользоваться loader'ом - будет:
Код:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller
, что наводит на мысль что контент выдернут. Или я тогда не понимаю в чем проблема. Исходник класса выложить?

Старый 17.08.2007, 20:08
__i вне форума Посмотреть профиль Отправить личное сообщение для __i Найти все сообщения от __i
  № 6  
Ответить с цитированием
__i
 
Аватар для __i

Регистрация: Jan 2004
Адрес: Украина, Харьков
Сообщений: 1,524
Отправить сообщение для __i с помощью ICQ
а почему тебе не создавать отдельный лоадер на каждую загрузку? лоадер по сути сам предаствляет дисплей обджект который атачиться на сцену. ну или просто атачить контент, потом делать лоадер=нул и создавать новый .
__________________
33 коровы

Старый 17.08.2007, 20:09
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 7  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от : hr :
а я и не хочу из loader'а выдерать контент - пущай будет, его все равно в display list у меня нет, Но! ежели после
Код:
container.addChild(pictLdr.content);
попытаться вновь воспользоваться loader'ом - будет:
Код:
ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller
, что наводит на мысль что контент выдернут. Или я тогда не понимаю в чем проблема. Исходник класса выложить?
Так нельзя, один объект не может находится в двух разных display list.
Исходник не помешает, клепать тестовый проект лень очень

Старый 17.08.2007, 20:34
: hr : вне форума Посмотреть профиль Отправить личное сообщение для : hr : Найти все сообщения от : hr :
  № 8  
Ответить с цитированием
: hr :

Регистрация: Nov 2003
Сообщений: 289
Цитата:
клепать тестовый проект лень очень
понимаю файл приложен

Код:
loader.removeChild(content);
не работает, выдает
Код:
Error #2069: The Loader class does not implement this method.
Цитата:
а почему тебе не создавать отдельный лоадер на каждую загрузку?...
__i, это вариант. Так и сделаю на крайний случай, но смущает наличие 2-х DisplyaObject вместо одного и как-то начал делать по такому пути, хочется теперь уж разобраться
Вложения
Тип файла: rar test.rar (263.2 Кб, 50 просмотров)

Старый 08.07.2008, 17:33
EugeneLitvinov вне форума Посмотреть профиль Отправить личное сообщение для EugeneLitvinov Найти все сообщения от EugeneLitvinov
  № 9  
Ответить с цитированием
EugeneLitvinov

Регистрация: Aug 2007
Сообщений: 34
Такая же точно беда была... нужно было загрузить 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, время: 06:03.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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