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

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

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

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
По умолчанию attachMovie в цикле

Здравствуйте. У меня есть задача: приаттачить из библиотеки несколько символов, которые зависят от определённого массива с данными. Всё просто, пишу такой код:

Код AS1/AS2:
var aData:Array = ['label1','label2','label3'];
 
var Brand:MovieClip = _root.createEmptyMovieClip( 'Brand', _root.getNextHighestDepth() );
 
for( var iCounter = 0; iCounter < aData.length; iCounter++ ){
	var mClip = Brand.attachMovie( '_button', 'Level-1-' + iCounter, _root.getNextHighestDepth() );
	mClip._x = 0;
	mClip._y = 37 + iCounter;
	mClip._label.text = aData[ iCounter];
}
При запуске вижу только последний символ, хотя если трейсом выводить в процессе — всё добавляется как надо. Но заменяется последующим.

Старый 20.12.2009, 23:58
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 2  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
мувики ты добавляешь в Brand, а смотришь следующую глубину из _root =)
__________________
мой пустой блог

Старый 21.12.2009, 09:16
nikitakozin вне форума Посмотреть профиль Отправить личное сообщение для nikitakozin Посетить домашнюю страницу nikitakozin Найти все сообщения от nikitakozin
  № 3  
Ответить с цитированием
nikitakozin

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
Исправил на Brand — проблемы не решило (

Старый 21.12.2009, 10:06
amexdesign вне форума Посмотреть профиль Отправить личное сообщение для amexdesign Посетить домашнюю страницу amexdesign Найти все сообщения от amexdesign
  № 4  
Ответить с цитированием
amexdesign

Регистрация: Jan 2009
Адрес: Германия, Bochum
Сообщений: 169
Отправить сообщение для amexdesign с помощью Skype™
Код AS1/AS2:
var aData:Array = ['label1','label2','label3'];
 
var Brand:MovieClip = _root.createEmptyMovieClip( 'Brand', _root.getNextHighestDepth() );
 
for( var iCounter = 0; iCounter < aData.length; iCounter++ ){
	var mClip = Brand.attachMovie( '_button', 'Level-1-' + iCounter, Brand.getNextHighestDepth() );
	mClip._x = 0;
	mClip._y = 37*iCounter;
	mClip._label.text = aData[iCounter];
}


Последний раз редактировалось amexdesign; 21.12.2009 в 10:09.
Старый 21.12.2009, 10:12
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 5  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
У вас здесь шаг всего один пиксель:
Код AS1/AS2:
mClip._y = 37 + iCounter;
Вероятно, они практически накладываются друг на друга, и если есть непрозрачный фон, вы этого можете не заметить.

Старый 21.12.2009, 10:57
nikitakozin вне форума Посмотреть профиль Отправить личное сообщение для nikitakozin Посетить домашнюю страницу nikitakozin Найти все сообщения от nikitakozin
  № 6  
Ответить с цитированием
nikitakozin

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
Смещение на пиксель — это у меня от проверки осталось, там, конечно же, умножение должно быть. Но даже в таком случае символы полупрозрачные и должны были наложиться.

Скопировал код amexdesign и заработало. Только не могу понять почему, он точно такой же, кроме того, что Brand подставлено, вместо _root.

Старый 21.12.2009, 11:34
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 7  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Если оставить _root, то все так и будет - будет только последний отображаться.
Вы вообще понимаете метод getNextHighestDepth() и для чего он служит?
Если не совсем, впишите в цикле строку
Код AS1/AS2:
trace (_root.getNextHighestDepth());
и посмотрите, что отобразит trace.

Если опять не очень понятно, то скажу:

Когда вы первый раз аттачите _button, то для задания уровня используете _root.getNextHighestDepth(), который возвращает "1" (Поскольку в _root на уровне "0" уже находится мувик Brand). То есть аттачите в Brand, а номер свободного уровня ищете в _root. Поскольку на _root это "1", в Brand аттач происходит на уровень 1.

Потом, циклом вы аттачите в Brand еще один мувик _button, но следующий свободный уровень ищете не в Brand, а опять-таки в _root. А на _root 1-й уровень как был свободным, так и остался, ведь вы его не заняли, аттачили-то на 1-й уровень в Brand.
Поэтому _root.getNextHighestDepth() вам честно возвращает опять "1", и на 1-й уровень в Brand лепится уже вторая _button. А ведь уровень-то уже занят предыдущей _button! Поэтому предыдущая вытесняется новым.

И т.д., и в результате остается только последний приаттаченный мувик на уровне "1" мувика Brand.

Все это равносильно тому, что вы просто напишите такую строку:
Код AS1/AS2:
var mClip = Brand.attachMovie( '_button', 'Level-1-' + iCounter, 1 );
то есть 1 вместо _root.getNextHighestDepth()


Последний раз редактировалось mooncar; 21.12.2009 в 11:43.
Старый 21.12.2009, 11:36
nikitakozin вне форума Посмотреть профиль Отправить личное сообщение для nikitakozin Посетить домашнюю страницу nikitakozin Найти все сообщения от nikitakozin
  № 8  
Ответить с цитированием
nikitakozin

Регистрация: Oct 2008
Сообщений: 8
Отправить сообщение для nikitakozin с помощью ICQ
Спасибо за доходчивое объяснение!
Действительно стало понятно :-)

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

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

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


 


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


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