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

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

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

Регистрация: Dec 2005
Сообщений: 20
По умолчанию Проблема с массивом, помогите разобраться.

Имеется следующий код. Если в кратце - после загрузки внешнего xml функция записывает все данные из xml в массив. Каждый элемент массива -object.

После того как цикл выполнен, при обращении к любому из элементов массива возвращается значение последнего элемента.

Почему?
Код AS3:
var arrCatalog:Array = new Array();              
 
public function xmlColLoaded(e:Event) {
			var objCol:Object = new Object();
			colors = XML(colorsLoader.data);
 
			for each(var prop:XML in colors.color) {
				objCol.id = prop.id;
				objCol.image = prop.image.toString();
				objCol.items = new Array();
 
				arrCatalog.push(objCol); 
                                // Здесь всё выводится нормально: img1.jpg img2.jpg ... img8.jpg)
				trace(arrCatalog.length-1,arrCatalog[arrCatalog.length-1].image);
 
				}
 
                        for(var i=arrCatalog.length-1; i>=0;i--) {
                                // А тут уже будет выведено 8 раз img8.jpg
				trace(arrCatalog[i].image);
			}
 
		}

Старый 10.09.2010, 21:28
Rzer вне форума Посмотреть профиль Отправить личное сообщение для Rzer Посетить домашнюю страницу Rzer Найти все сообщения от Rzer
  № 2  
Ответить с цитированием
Rzer
 
Аватар для Rzer

блогер
Регистрация: Feb 2007
Адрес: Spb
Сообщений: 612
Записей в блоге: 8
Отправить сообщение для Rzer с помощью ICQ
Код AS3:
colors = XML(colorsLoader.data);
	for each(var prop:XML in colors.color) {
           var objCol:Object = new Object();
....
Иначе у Вас в массиве будет храниться ссылка 8 раз на один и тот же объект, свойства которого перетираются.

Старый 10.09.2010, 22:34
MadEx вне форума Посмотреть профиль Отправить личное сообщение для MadEx Найти все сообщения от MadEx
  № 3  
Ответить с цитированием
MadEx

Регистрация: Dec 2005
Сообщений: 20
Спасибо, за ответ! Теперь всё работает )

А я-то думал, что в элемент массива записывается не ссылка на объект, а сам объект.

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
А я-то думал, что в элемент массива записывается не ссылка на объект, а сам объект.
В AS3 с объектом можно сделать только 2 вещи:
1) new ComeClass() - создать новый объект
2) BitmapData.dispose() - удалить объект из памяти (работает только с BitmapData)

Все остальные операции происходят со ссылками на объекты
__________________
...вселенская грусть

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

Теги
array , AS3 , object , массив
Опции темы
Опции просмотра

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

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


 


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


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