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

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

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

Регистрация: Nov 2006
Адрес: *.kh.ua
Сообщений: 19
По умолчанию Доступ к MovieClip'ам, вложенным в Button

Вопрос заключается вот в чём.

1. Допустим, у нас имеется MovieClip. Мы присваиваем его экземпляру имя mc.

2. В него мы из библиотеки может добавить экземпляр какого-то другого мувиклипа, присвоив ему InstanceName = "l1" (по номеру уровня).

3. В этот l1 можно добавить экземпляр третьего мувиклипа из библиотеки, присвоив этому экземпляру имя "l2".

4. В l3 помещается ещё один экземпляр и называется l3.

Таким образом, для того, чтобы заставить ролик l3 проигрываться с метки под названием "play_l3", нужен следующий код:

Код:
_level0.mc.l1.l2.l3.gotoAndPlay("play_l3");
Это работает для всех мувиклипов, но что касается кнопок (символов типа Button), здесь ситуация немного другая.

1. Создаём кнопку. Называем её "btn". В кадр "Up" добавляем экземпляр мувиклипа из библиотеки, называем его l1.
2. В l1 добавляем ещё один экземпляр, называем его l2.
3. В l2 добавляем ещё один экземпляр, называем его l3.

Значит для того, чтобы запустить анимацию с метки "play_l3" нужен соответственно код

Код:
_level0.btn.l1.l2.l3.gotoAndPlay("play_l3");
Но данный код не работает, трассировка показывает, что _level0.btn.l1.l2.l3 не определён, а путь до l3 выглядит следующим образом:

Код:
_level0.btn.l1.instance2.l3
Вопрос заключается в том, почему Флеш использоват для l2 автоматическое именование (сгенерированное название "instance2"), и не воспользовался заданным вручную значением "l2"? В мувиклипах такой проблемы нет, а вот при большой вложенности мувиклипов в кнопках она встречается постоянно.

Можно, конечно, в дебаггере посмотреть автоматически просвоенное название экземпляра и обращаться к l3 следующим образом:

Код:
_level0.btn.l1.instance2.l3.gotoAndPlay("play_l3");
Но, кроме того, что такой подход очень неудобен для восприятия, он вносит существенную проблему, которая заключается в том, что при добавлении в ролик экземпляров мувиклипов без названия (которым Флеш автоматически просвоит имена), instance2 может уже оказаться, скажем, instancе5 и далее в том же духе...

Что это такое с именованием экземпляров в кнопках и как с этим можно бороться?

Старый 21.02.2008, 19:58
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Либо использовать мувкилипные-кнопки.
Либо внутри мувиклипов, которые распологаются в кнопках написать код, переопредляющий инстансы
Код:
this._name = "l1";
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 21.02.2008, 20:32
Olegg вне форума Посмотреть профиль Найти все сообщения от Olegg
  № 3  
Ответить с цитированием
Olegg
Banned
[+1 21.02.08]
[+4 21.02.08]
[+5 13.03.08]
[+4 13.03.08]

Регистрация: Feb 2008
Сообщений: 63
не,переопределять инстансы - это головняк.Лучше всегда использовать MovieClip.

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

Регистрация: Nov 2006
Адрес: *.kh.ua
Сообщений: 19
Дело в том, что мне нужно было получить возможность корректно перехватывать событие, когда пользователь наводит мышь на ролик и убирает её с него. В MovieClip'ах событие on (rollOver) далеко не всегда вызывалось (если быстро двигать курсором над мувиком, оно практически не вызывается), а вот у Button'ов оно вызывается всегда. Вот по какой причины я решил уйти от MovieClip'ов с человеческим именованием instance'ов к кнопкам. Да, с переопределением инстансов не очень весело получается... Но можно и с ним помучиться, всё-таки проблема с instance на такая серьёзная, как проблема с не вызвающимся onRollOver в мувиках...

Цитата:
Сообщение от iNils
Код:
this._name = "l1";
Спасибо за совет. Сам не понимаю, как я вчера до этого не додумался!


Последний раз редактировалось iNils; 22.02.2008 в 15:48.
Старый 22.02.2008, 15:53
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 5  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от deep_freeze
В MovieClip'ах событие on (rollOver) далеко не всегда вызывалось (если быстро двигать курсором над мувиком, оно практически не вызывается), а вот у Button'ов оно вызывается всегда.
Вам померещилось. Механика у них одна. Баттонов точно также может упустить мышь. И знаете почему? Потому, что мышь двигается дискретно, и при быстром движении, два ее положения могут оказаться по разные стороны кнопки, поэтому событие и не работает. Так что не надо морать доброе имя мувиклипов.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

Регистрация: Nov 2006
Адрес: *.kh.ua
Сообщений: 19
Цитата:
Сообщение от iNils
Вам померещилось. Механика у них одна. Баттонов точно также может упустить мышь. И знаете почему? Потому, что мышь двигается дискретно, и при быстром движении, два ее положения могут оказаться по разные стороны кнопки, поэтому событие и не работает. Так что не надо морать доброе имя мувиклипов.
Да, это всё объясняет. Сегодня долго издевался над кнопками, водя над ними курсором. onRollOver, как ни странно, срабатывал всегда, или во всяком случае, его несрабатывание совсем незаметно для пользователя.

Старый 22.02.2008, 18:06
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 7  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
А вы зря мучаетесь с этим. Обычные текстовые ссылки в html, ведут себя точно также. Поэтому если ваша кнопка имеет нормальные размеры, чтобы по ней можно было попасть со скоростью много выше обычной скорости перемещения мыши, то пользователь делает это сознательно и это неопадание лежит на его совести.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

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

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

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


 


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


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