Форум 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)
-   -   Проблема с добавлением кнопки в мувиклип (http://www.flasher.ru/forum/showthread.php?t=149100)

Mulin 19.01.2011 14:12

Проблема с добавлением кнопки в мувиклип
 
Всем доброго времени суток. Столкнулся с такой проблемой. Есть XML файл ноды которого создают циклом экземпляры мувиклипа и экземпляры кнопки для мувиклипа, код
Код AS1/AS2:

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 это контейнер для скролинга экземпляров. Проблема в том, что я немогу добавить в контейнер одномременно и кнопку и мувиклип. То есть можно либо одно либо другое, но вместе не работают., не запускается цикл впринципе и поле пустое. Если код изменить таким образом
Код AS1/AS2:

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. Что делать как быть? :(

udaaff 19.01.2011 14:51

Ну так вы их на одну и ту же глубину добавляете.

Mulin 19.01.2011 14:57

А как поставить другую? Думаете в этом проблема?

Добавлено через 20 минут
Разобрался с глубиной, но она ничего не решает. Если выставить скажем число 3 для кнопки, то просто пропадает третий по счету экземпляр мувиклипа. Я вот думаю, если поставить кнопку непосредственно в мувиклип, не циклом, а сделать частью мувиклипа. Разумеется в таком случае она просто так не заработает, курсор над кнопкой будет посылать команду как еслибы он был над мувиклипом, но могет это как нить можно обойти?

mooncar 19.01.2011 16:39

Можно. Используйте непрерывную проверку на hitTest. Только кнопка должна быть не символом типа Button, а символом типа MovieClip.

А по проблеме. Вообще, я бы сделал либо две пачки приаттачиваемых мувиков в разных контейнерах, чтобы не было конфликотв с глубинами, либо во втором наборе просто прибавил к глубине некую константу, которая зависела бы от количества мувиков в первой пачке (то есть начал бы отсчет с vsego). То есть нумерация глубин продолжалась бы с определенного значения, и ничто бы не исчезало.

Mulin 19.01.2011 17:01

mooncar, две пачки контейнеров не лучший выход, это скролить два контейнера нужно. Хотя... можно привязать _y нескролируемого к _y скролируемого. Жесть конечно, но выход. Что касается кностант. Оно не только исчезает, но и кнопка все равно на месте исчезнувшего контейнера не появляется. Вобщем вопрос пока открыт.
Немножко офтопика. Делаю скрол вместе с блюром. То есть в направлении скролинга контейнер должен размывается. Включить фильтр не проблема, по событию колеса он включается, а вот как его выключить?

mooncar 19.01.2011 17:09

Пример. Рисуем mc, добавляем в кадр код и нажимаем после компиляции на mc.
Код AS1/AS2:

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. Новый вопрос - новая тема.

Mulin 19.01.2011 17:45

mooncar, в том то и дело, что срабатывает он единожды, произошло событие onMouseWheel - фильтр применился, а как его убрать после окончания действия onMouseWheel?

Добавлено через 2 минуты
Я так применяю
Код AS3:

//импортирую фильтра
blurstart = new flash.filters.BlurFilter(0, 10, 2);
blurend = new flash.filters.BlurFilter(0, 10, 2);

и применяю переменные
Код AS3:

//переменные
vidthumbs_mc.filters = [blurstart];
vidthumbs_mc.filters = [blurend];


mooncar 19.01.2011 17:52

У обработчика onMouseWheel есть аргумент, принимающий отрицательные или положительные значения в з-ти от направления вращения колесика:
Код AS1/AS2:

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 минуты
Цитата:

Сообщение от Mulin (Сообщение 965910)
Я так применяю

Так применяйте так же на нужное событие, только нули задайте, и фильтр обнулится.
Код AS1/AS2:

blurend = new flash.filters.BlurFilter(0, 0, 0);


Mulin 19.01.2011 18:24

Я плохо иногда обьясняю ). Вобщем суть такова. При вращении колесика, в сам момент перемещения контейнера, блюр включается, как только колесико перестало вращаться, контейнер не двишгаеться, фильтр не применяется. Вышеозначенным способом очень легко включить фильтр, а вто как его выключить в тот момент, когда колесо мыши не вращаеться?

mooncar 19.01.2011 19:18

Вложений: 1
Если мувик vidthumbs_mc, то вот рабочий пример:
Код AS1/AS2:

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;               
}

Я бы еще ввел плавное увеличение-уменьшение блюра при начале и остановке движения... Но это факультативно.


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

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