Просмотр полной версии : Проблема с добавлением кнопки в мувиклип
Всем доброго времени суток. Столкнулся с такой проблемой. Есть XML файл ноды которого создают циклом экземпляры мувиклипа и экземпляры кнопки для мувиклипа, код
for (var i:Number = 0; i<vsego; i++)
{
//создает экземпляры кнопки
var delite_btn:MovieClip = Scrol_mc.vid_mc.attachMovie("delite_btn", "Scrol_mc" +i, i);
delite_btn._x = 265;
delite_btn._y = i*65+5;
//создает экземпляры мувиклипа
var Mediablock:MovieClip = Scrol_mc.vid_mc.attachMovie("Mediablock", "Scrol_mc"+i, i);
Mediablock._y = i*65;
Mediablock._alpha = 70;
Scrol_mc.vid_mc это контейнер для скролинга экземпляров. Проблема в том, что я немогу добавить в контейнер одномременно и кнопку и мувиклип. То есть можно либо одно либо другое, но вместе не работают., не запускается цикл впринципе и поле пустое. Если код изменить таким образом
for (var i:Number = 0; i<vsego; i++)
{
//создает экземпляры кнопки
var delite_btn:MovieClip = Scrol_mc.attachMovie("delite_btn", "Scrol_mc" +i, i);
delite_btn._x = 265;
delite_btn._y = i*65+5;
//создает экземпляры мувиклипа
var Mediablock:MovieClip = Scrol_mc.vid_mc.attachMovie("Mediablock", "Scrol_mc"+i, i);
Mediablock._y = i*65;
Mediablock._alpha = 70;
То цикл создается, элементы создаются, но разумеется delite_btn не скролиться, скролиться только Mediablock. Что делать как быть? :(
Ну так вы их на одну и ту же глубину добавляете.
А как поставить другую? Думаете в этом проблема?
Добавлено через 20 минут
Разобрался с глубиной, но она ничего не решает. Если выставить скажем число 3 для кнопки, то просто пропадает третий по счету экземпляр мувиклипа. Я вот думаю, если поставить кнопку непосредственно в мувиклип, не циклом, а сделать частью мувиклипа. Разумеется в таком случае она просто так не заработает, курсор над кнопкой будет посылать команду как еслибы он был над мувиклипом, но могет это как нить можно обойти?
Можно. Используйте непрерывную проверку на hitTest. Только кнопка должна быть не символом типа Button, а символом типа MovieClip.
А по проблеме. Вообще, я бы сделал либо две пачки приаттачиваемых мувиков в разных контейнерах, чтобы не было конфликотв с глубинами, либо во втором наборе просто прибавил к глубине некую константу, которая зависела бы от количества мувиков в первой пачке (то есть начал бы отсчет с vsego). То есть нумерация глубин продолжалась бы с определенного значения, и ничто бы не исчезало.
mooncar, две пачки контейнеров не лучший выход, это скролить два контейнера нужно. Хотя... можно привязать _y нескролируемого к _y скролируемого. Жесть конечно, но выход. Что касается кностант. Оно не только исчезает, но и кнопка все равно на месте исчезнувшего контейнера не появляется. Вобщем вопрос пока открыт.
Немножко офтопика. Делаю скрол вместе с блюром. То есть в направлении скролинга контейнер должен размывается. Включить фильтр не проблема, по событию колеса он включается, а вот как его выключить?
Пример. Рисуем mc, добавляем в кадр код и нажимаем после компиляции на mc.
import flash.filters.BlurFilter;
var filterArray:Array = new Array();
var filter:BlurFilter = new BlurFilter(30, 30, 2);
filterArray[0] = filter;
mc.filters = filterArray;
mc.onRelease = function()
{
var filter:BlurFilter = this.filters[0];
filter.blurX = 0;
filter.blurY = 0;
filterArray[0] = filter;
mc.filters = filterArray;
};
То есть выбираем нулевые параметры блюра и переназначаем массив фильтров.
То, что тут на onRelease, прикручиваем к нужному событию колесика.
PS. Новый вопрос - новая тема.
mooncar, в том то и дело, что срабатывает он единожды, произошло событие onMouseWheel - фильтр применился, а как его убрать после окончания действия onMouseWheel?
Добавлено через 2 минуты
Я так применяю
//импортирую фильтра
blurstart = new flash.filters.BlurFilter(0, 10, 2);
blurend = new flash.filters.BlurFilter(0, 10, 2);
и применяю переменные
//переменные
vidthumbs_mc.filters = [blurstart];
vidthumbs_mc.filters = [blurend];
У обработчика onMouseWheel есть аргумент, принимающий отрицательные или положительные значения в з-ти от направления вращения колесика:
import flash.filters.BlurFilter;
var filterArray:Array = new Array();
var filter:BlurFilter = new BlurFilter(30, 30, 2);
filterArray[0] = filter;
mc.filters = filterArray;
var mouseListener:Object = new Object();
mouseListener.onMouseWheel = function(delta) {
if (delta < 0)
{
var filter:BlurFilter = this.filters[0];
filter.blurX = 0;
filter.blurY = 0;
filterArray[0] = filter;
mc.filters = filterArray;
}
};
Mouse.addListener(mouseListener);
Или вы о каком событии говорите? "после окончания действия onMouseWheel" - это что конкретно-то?
Спустя сколько-то миллисек. блюр должен плавно убраться? Просто выключиться? Не очень понятно.
Добавлено через 23 минуты
Я так применяю
Так применяйте так же на нужное событие, только нули задайте, и фильтр обнулится.
blurend = new flash.filters.BlurFilter(0, 0, 0);
Я плохо иногда обьясняю ). Вобщем суть такова. При вращении колесика, в сам момент перемещения контейнера, блюр включается, как только колесико перестало вращаться, контейнер не двишгаеться, фильтр не применяется. Вышеозначенным способом очень легко включить фильтр, а вто как его выключить в тот момент, когда колесо мыши не вращаеться?
Если мувик vidthumbs_mc, то вот рабочий пример:
import flash.filters.BlurFilter;
var filterArray:Array = new Array();
var filter:BlurFilter = new BlurFilter(0, 0, 2);
var canSetBlur:Boolean = true ;
var to:Number ;
var mListener:Object = new Object();
mListener.onMouseWheel = mouseWheel;
Mouse.addListener(mListener);
function mouseWheel(delt:Number)
{
clearTimeout(to); //Если скроллинг продолжается, то установка блюра в 0 отменяется
if (canSetBlur) //триггер предотвращает множественные повторные установки блюра в 10
{
filter.blurX = 0;
filter.blurY = 10;
filterArray[0] = filter;
vidthumbs_mc.filters = filterArray;
canSetBlur = false ;
}
//Вводим отсроченную установку блюра в 0 после установки в 10
to = setTimeout(resetState, 200);
//какие-то движения mc
vidthumbs_mc._y += delt;
}
function resetState ()
{
canSetBlur = true ;
filter.blurX = 0;
filter.blurY = 0;
filterArray[0] = filter;
vidthumbs_mc.filters = filterArray;
}
Я бы еще ввел плавное увеличение-уменьшение блюра при начале и остановке движения... Но это факультативно.
Вот спасибо :) сейчас буду разбирать код
Вложение, если что непонятно, гляньте.
Там самое главное - после каждого движения колесика делается попытка установки блюра в 0 через 200 миллисекунд.
Если колесико опять успеет повернутся, то отсроченная установка в 0 отменяется.
Это для того, чтобы по завершению движения с мувика был снят блюр, но в процессе движения колесика установленный первый раз блюр держался.
Я бы еще ввел плавное увеличение-уменьшение блюра при начале и остановке движения... Но это факультативно.
Это я и собираюсь додумать, еще раз спасибо
Пожалуйста.
Это я и собираюсь додумать, еще раз спасибо
Вот был такой вариант, как во вложении к этому посту.
Но сейчас лично я пользуюсь классом TweenLite... там есть работа с фильтрами.
Я только начал осваивать твины, пробывал скрол с плавным стартом и торможением сделать, думаю на примере вашего последнего вложения можно что нить придумать.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.