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

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

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

Регистрация: Apr 2009
Сообщений: 141
Question как правильно обратится к элементу массива

у родительского класса два потомка

в одном потомке создан массив и мувиклип

Код AS3:
		public var block_mc:MovieClip;
		public var block_array:Array;
...
 
			var temp2:MovieClip = new block  ;
			temp2.x = 275;
			temp2.y = -50;//меньше - выше
			temp2.name = 'block_mc';
			addChild(temp2);
			block_mc = MovieClip(getChildByName("block_mc"));
			var block_array:Array = new Array  ;
			block_array.push(32);
 
			trace (block_array[0]); //печатает [object block]
			trace (block_mc); //печатает 32
из другого потомка хочу обратится к этому массиву и мувиклипу

Код AS3:
trace((this.parent as MovieClip).blocking_mc.block_mc);  //печатает [object block]
trace((this.parent as MovieClip).blocking_mc.block_array[0]); //ошибка Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
подскажите, пожалуйста - как правильно обратится к элементу массива в данном случае


Последний раз редактировалось Agni; 13.12.2011 в 20:38.
Старый 13.12.2011, 20:38
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 2  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
протрейсите без обращения к элементу массива
Код AS3:
trace((this.parent as MovieClip).blocking_mc.block_array);

Старый 13.12.2011, 21:38
Agni вне форума Посмотреть профиль Отправить личное сообщение для Agni Найти все сообщения от Agni
  № 3  
Ответить с цитированием
Agni

Регистрация: Apr 2009
Сообщений: 141
null пишет

странно - в одном месте создаются

как обращаться тогда к массиву?

Старый 13.12.2011, 21:40
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
ну если null пишет, надо, наверно, сначала добиться чтобы вместо null был Array, а потом к нему обращаться.
Если совсем туго - выложите кусок кода поболе - может выясним почему он не создается или исчезает до момента обращения этого.


Последний раз редактировалось expl; 13.12.2011 в 21:45.
Старый 13.12.2011, 23:02
Agni вне форума Посмотреть профиль Отправить личное сообщение для Agni Найти все сообщения от Agni
  № 5  
Ответить с цитированием
Agni

Регистрация: Apr 2009
Сообщений: 141
изменил:
Код AS3:
		public var block_mc:MovieClip;
		public var block_array:Array;
...
 
			var temp2:MovieClip = new block  ;
			temp2.x = 275;
			temp2.y = -50;//меньше - выше
			temp2.name = 'block_mc';
			addChild(temp2);
			block_mc = MovieClip(getChildByName("block_mc"));
 
			var block_array:Array = new Array  ;
			block_array.push(32);
на
Код AS3:
		public var block_mc:MovieClip;
		public var block_array:Array = new Array  ;
...
			var temp2:MovieClip = new block  ;
			temp2.x = 275;
			temp2.y = -50;//меньше - выше
			temp2.name = 'block_mc';
			addChild(temp2);
			block_mc = MovieClip(getChildByName("block_mc"));
 
			//var block_array:Array = new Array  ;
			block_array.push(32);
пока ошибок не выдает
хотя разница смутно-непонятна

Старый 13.12.2011, 23:06
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 6  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Очевидно обращение из другого класса происходило раньше до создания массива.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 13.12.2011, 23:18
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 7  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
//var block_array:Array = new Array ;
block_array.push(32);
Если дело было внутри функции, а не в кадре - то переменная var block_array:Array перекрыла область видимости муви-клипа и массив присваивался _переменной_, а не _полю_ муви-клипа

Сначала доступ идет к переменным, а потом к полям.

Хотя стоп, если на block_array.push(32); не упало после закомментирования - значит в поле был таки присвоен массив. Действительно странно

Если только вы в той же функции вверху написали
Код AS3:
block_array = new Array
то раньше block_array ссылалось на переменную, определенную _ниже_, а после закоментаривания оной - стало ссылаться на поле.
Вот за такую политику работы с переменными порой ненавидишь авторов ECMA


Последний раз редактировалось expl; 13.12.2011 в 23:29.
Старый 13.12.2011, 23:25
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 8  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Цитата:
Сообщение от expl Посмотреть сообщение
Хотя стоп, если на block_array.push(32); не упало после закомментирования
В строчке добавлена инициализация, а раньше только объявление было.
Код AS3:
public var block_array:Array = new Array  ;
Раньше поле класса всегда было пустым. Потому что массив заносился в локальную переменную, а сейчас сразу при объявлении там сидит массив.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.

Старый 14.12.2011, 00:35
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 9  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
В строчке добавлена инициализация, а раньше только объявление было.
Дествительно

Старый 17.12.2011, 01:11
Agni вне форума Посмотреть профиль Отправить личное сообщение для Agni Найти все сообщения от Agni
  № 10  
Ответить с цитированием
Agni

Регистрация: Apr 2009
Сообщений: 141
спасибо

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

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

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


 


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


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