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

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

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

Регистрация: Mar 2006
Адрес: Armenia, Yerevan
Сообщений: 64
Отправить сообщение для PIRIS с помощью ICQ
По умолчанию MovieClips Array

Добрый день!

Задача следующая. Есть xml файл, откуда загружаь информацию о swf файлах. Их количество мне заведомо не известно, поэтому мне нужно создать массив MovieClip-ов,
MovieLoader-ов и URLRequest-ов. Создаю их в цикле. Но как я понимаю, добавляя их в архив, они далее будут недоступны. Вот код. Замучался сильно, подскажите, как справиться с ситуацией? Спасибо заранее
Код AS3:
...
var iLoaders:Array = new Array;
var iRequests:Array = new Array;
var iObjects:Array = new Array;
....
protected function initiateScene()
{
var n:int = settingsXML.NAVITEM.length();
for (var i:int = 0; i < n; i++)
{
var nLoader:MovieLoader = new MovieLoader();
var nRequest:URLRequest = new URLRequest(settingsXML.NAVITEM[i].@title+".swf");
var nObject:MovieClip = new MovieClip();
.....
nLoader.load(nRequest);
 
iLoaders.push(nLoader);
iRequests.push(nRequest);
iObjects.push(nObject);
}
}


Последний раз редактировалось PIRIS; 28.08.2010 в 10:36.
Старый 28.08.2010, 00:35
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 2  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
А с чего вы взяли, что они будут недоступны? Там, где у вас доступны ваши массивы, там же будут доступны и все объекты, которые вы туда загнали... Или я не понял вопроса? В чем в итоге проблема?

p.s.: Оформите код тегами, иначе вом скоро об этом напомнят модераторы.

Старый 28.08.2010, 10:35
PIRIS вне форума Посмотреть профиль Отправить личное сообщение для PIRIS Найти все сообщения от PIRIS
  № 3  
Ответить с цитированием
PIRIS
 
Аватар для PIRIS

Регистрация: Mar 2006
Адрес: Armenia, Yerevan
Сообщений: 64
Отправить сообщение для PIRIS с помощью ICQ
Спасибо. Я предположил что они будут недоступными поскольку я создаю переменные nLoader, nRequest и nObject локально в функции. Вот и хотел уточнить так ли это?
Еще один момент. Если у меня nLoader будет другого типа, т.е. класса наследованного от MovieLoader и у нее будет переменная скажем iname. Я присваиваю значение в этом же цикле, а после загрузки самого MovieClip-а данное значение теряется.
В цикле:
Код AS3:
var nLoader:lqMovieLoader = new lqMovieLoader(MovieClip(this));
...
nLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onBtnCompleteHandler);
...
iObjects[i].itemname = settingsXML.NAVITEM[i].@title;
В onBtnCompleteHandler у меня уже не будет доступно присвоенное значение. Может все же MovieClip-ы лучше добавлять в архив в onBtnCompleteHandler, когда она уже загружена?

Старый 28.08.2010, 11:22
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 4  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Я предположил что они будут недоступными поскольку я создаю переменные nLoader, nRequest и nObject локально в функции.
Локальные переменные не будут доступны вне функции.

Попробовал с примером как у вас, всё доступно. Где то в другом месте вы просчитались.
Класс:
Код AS3:
package{
	import flash.display.Loader
	public class TempLoader extends Loader{
		public var string:String;
		public function TempLoader(str){
			string=str
		}
	}
}
код в кадре:
Код AS3:
var arr:Array=[]
var loader1:TempLoader=new TempLoader("a");
var loader2:TempLoader=new TempLoader("b");
addChild(loader1)
addChild(loader2)
arr.push(loader1)
arr.push(loader2)
 
loader1.load(new URLRequest("10001.jpg"))
loader1.contentLoaderInfo.addEventListener(Event.COMPLETE,comp1)
function comp1(e:Event){
	trace(arr[0].string)//---> a
}
 
loader2.load(new URLRequest("10002.jpg"))
loader2.contentLoaderInfo.addEventListener(Event.COMPLETE,comp2)
function comp2(e:Event){
	trace(arr[1].string)//---> b
}


Последний раз редактировалось samana; 28.08.2010 в 11:44.
Старый 28.08.2010, 18:47
PIRIS вне форума Посмотреть профиль Отправить личное сообщение для PIRIS Найти все сообщения от PIRIS
  № 5  
Ответить с цитированием
PIRIS
 
Аватар для PIRIS

Регистрация: Mar 2006
Адрес: Armenia, Yerevan
Сообщений: 64
Отправить сообщение для PIRIS с помощью ICQ
Цитата:
Сообщение от samana Посмотреть сообщение
Локальные переменные не будут доступны вне функции.
А как тогда можно создать массив, если я не знаю количество MovieClip-ов и соответственно не знаю сколько переменных создать вне функции?

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Ну вроде же вы всё правильно делали, создали массив перед функцией, во время функции положили в массив всё что нужно, а потом берите данные из этого массива сколько угодно.

Старый 28.08.2010, 19:35
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 7  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Не то слово выделили.
Локальные переменные не будут доступны вне функции.
Массив, объявленный в теле класса, будет доступен во всех методах класса. И хранящиеся в нем ссылки на созданные объекты - тоже. Объекты хранятся в памяти, а не "в функции". Если на них есть ссылки (а они в массиве), то Вы имеете к ним доступ. Если бы ссылки были только в теле функции - то да, извне были бы недоступны.
__________________
Reality.getBounds(this);

Старый 28.08.2010, 19:36
PIRIS вне форума Посмотреть профиль Отправить личное сообщение для PIRIS Найти все сообщения от PIRIS
  № 8  
Ответить с цитированием
PIRIS
 
Аватар для PIRIS

Регистрация: Mar 2006
Адрес: Armenia, Yerevan
Сообщений: 64
Отправить сообщение для PIRIS с помощью ICQ
Ребята, спасибо большое, я уже все понял. Мне остается тогда найти проблему в другом месте Наверное запутался в своем коде.

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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