Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Доступ к MovieClip'ам, вложенным в Button (http://www.flasher.ru/forum/showthread.php?t=108421)

deep_freeze 21.02.2008 17:12

Доступ к 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 и далее в том же духе...

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

iNils 21.02.2008 19:58

Либо использовать мувкилипные-кнопки.
Либо внутри мувиклипов, которые распологаются в кнопках написать код, переопредляющий инстансы
Код:

this._name = "l1";

Olegg 21.02.2008 20:32

не,переопределять инстансы - это головняк.Лучше всегда использовать MovieClip.

deep_freeze 22.02.2008 14:45

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

Цитата:

Сообщение от iNils
Код:

this._name = "l1";

Спасибо за совет. Сам не понимаю, как я вчера до этого не додумался! :)

iNils 22.02.2008 15:53

Цитата:

Сообщение от deep_freeze
В MovieClip'ах событие on (rollOver) далеко не всегда вызывалось (если быстро двигать курсором над мувиком, оно практически не вызывается), а вот у Button'ов оно вызывается всегда.

Вам померещилось. Механика у них одна. Баттонов точно также может упустить мышь. И знаете почему? Потому, что мышь двигается дискретно, и при быстром движении, два ее положения могут оказаться по разные стороны кнопки, поэтому событие и не работает. Так что не надо морать доброе имя мувиклипов.

deep_freeze 22.02.2008 17:41

Цитата:

Сообщение от iNils
Вам померещилось. Механика у них одна. Баттонов точно также может упустить мышь. И знаете почему? Потому, что мышь двигается дискретно, и при быстром движении, два ее положения могут оказаться по разные стороны кнопки, поэтому событие и не работает. Так что не надо морать доброе имя мувиклипов.

Да, это всё объясняет. Сегодня долго издевался над кнопками, водя над ними курсором. onRollOver, как ни странно, срабатывал всегда, или во всяком случае, его несрабатывание совсем незаметно для пользователя.

iNils 22.02.2008 18:06

А вы зря мучаетесь с этим. Обычные текстовые ссылки в html, ведут себя точно также. Поэтому если ваша кнопка имеет нормальные размеры, чтобы по ней можно было попасть со скоростью много выше обычной скорости перемещения мыши, то пользователь делает это сознательно и это неопадание лежит на его совести.


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

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