On-Line Библиотека www.XServer.ru - учебники, книги, статьи, документация, нормативная литература.
       Главная         В избранное         Контакты        Карта сайта   
    Навигация XServer.ru






 

Drag and Drop. Варианты

Автор: © gOloVasTicK

Фактически в данном уроке я рассмотрю три варианта.
//Четвертый просто улучшенный третий.

1. StartDrag
2. Трех-кадровый цикл
3. onClipEvent(mouseMove)

Для начала открываем Flash.
Рисуем четыре круга.


Далее делаем наши кружочки кнопками (поочередно отмечаем круги по одному и нажимаем F8 в появившемся меню выбираем Button).


Теперь делаем их Муви Клипами (поочередно отмечаем круги по одному и нажимаем F8 в появившемся меню выбираем Movie Clip).

Способ 1. StartDrag
Два раза кликаем на первый круг (далее: входим в символ). Нажимаем на круг правой клавишей и выбираем в выпавшем меню Actions. В окошке пишем (если вы работаете в Normal Mode, то выбирайте из списка команд, хотя советую переходить в Expert Mode это можно сделать нажатием клавиш Ctrl+E):

on (press) {
startDrag (this, true);
}
on (release) {
stopDrag ();
}


Наш первый Драг готов. Можете проверить это протестировав Мувик.
Работает это за счет пары стандартных ф-й StartDrag() и StopDrag().
У стандартной ф-ии StartDrag есть один недостаток, драгать вы можете только один мувик.

Способ 2. Трех-кадровый цикл

Входим во второй круг-символ.
Добавляем еще один слой. В первом кадре пишем Action:

stop();

Продлеваем мувиклип до трех кадров (отметьте кадр и нажмите F5). Отмечаем третий кадр, нажимаем F6.
В нем пишем:

_x = _root._xmouse;
_y = _root._ymouse;
gotoAndPlay (2);


На кнопке пишем Action:

on (press) {
play ();
}
on (release, releaseOutside) {
gotoAndStop (1);
}

Второй пример готов.
Он работает следующим образом:
При нажатии на кнопку мувик начинает проигрываться, дойдя до 3 кадра мувик приравнивает свою Х координату к Х координате мыши, тоже самое происходит с У. Далее мув отправляется на второй кадр. Образуеться цикл. При отпускании кнопки мув отправляет себя на первый кадр, где и останавливаеться.

Способ 3. onClipEvent(mouseMove)

Не входя в символ пишем Action прямо на мувик:

onClipEvent (mouseMove) {
if (drag) {
_x = _root._xmouse;
_y = _root._ymouse;
}
}


Далее входим в символ и на кнопке пишем:

on (press) {
drag = 1;
}
on (release, releaseOutside) {
drag = 0;
}

Пример готов.
Этот мувик выполняет код написанный на нем при каждом движении мыши. Нажатием кнопки мы присваиваем переменной drag значение 1. Теперь условие if(drag) на мувике исполняеться и аналогично с предидущим примером мувик приравнивает свои координаты к мышке.

Способ 4. Улучшенный 3

Пример 3 исполняеться быстрее всего, единственный его недостаток это то что переменная drag проверяеться при каждом движении мыши, а нам этого не надо. Поэтому делаем следующее.
Входим в наш четвертый кружок-символ и добавляем в нем два слоя. В первом кадре верхнего слоя пишем:

stop();

На кнопке пишем:

on (press) {
gotoAndStop(2);
}
on (release, releaseOutside) {
gotoAndStop(1);
}

Второй кадр второго слоя делаем ключевым (F6). В нем делаем пустой символ (я делаю это так: русую круг, делаю его символом, вхожу в символ, стираю круг). На нем пишем (на пустом символе, а не внутри него):

onClipEvent (mouseMove) {
_parent._x = _root._xmouse;
_parent._y = _root._ymouse;
}


Пример готов.
Усовершеннствование в том, что движения мыши обрабатываються только после нажатия кнопки.

Вот в общем то и все. Надеюсь это кому-нибудь поможет.