Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Изучение Flash MX. Курс для начинающих и профессионалов. Эффект двойного щелчка во Flash.


Информационный Канал Subscribe.Ru

Обучение по Flash MX.

Эффект двойного щелчка во Flash. (24.10.2005)

Автор: Александр Манжулов

Сайт: http://www.helpexe.ru/

Форум: http://forum.helpexe.ru/

E-mail: admin@helpexe.ru или mail@helpexe.ru

Архив рассылки: http://subscribe.ru/catalog/comp.paper.flashhelp

Дорогие друзья!

Хочу сообщить вам, что на нашем сайте www.helpexe.ru открылся новый раздел, посвящённый изучению технологии Flash Communication Server MX. С помощью этой технологии вы с лёгкостью можете создавать полноценные сетевые Flash-приложения, такие, как чаты, аудио/видеоконференции и многие другие. Раздел будет регулярно пополняться всё новыми статьями и уроками.

Итак, вперёд, к изучению Flash Communication Server MX!


Начиная с программы Macromedia Flash 5 стало возможным обнаружение двойного клика мыши: при одинарном нажатии кнопки мыши происходит одно действие, а при двойном – другое. Нам помогает обработчик onClipEvent и событие enterFrame для муви клипов, которые позволяют скрипту проверять условие в определённые промежутки времени.

  1. Создайте самую обычную кнопку (подробнее...). В новом проекте поместите образец созданной кнопки на сцену.
  2. Поместите кнопку внутрь муви клипа. Выделите кнопку и выберите Insert->Convert to Symbol, и в появившемся окне выберите Movie Clip.
  3. Выделите только что созданный муви клип, выберите Window->Actions и в появившуюся панель Действий (Actions) вставьте следующий скрипт:

onClipEvent (load) {
doubleclickDuration = 300;
   lastClick = 0;
}

onClipEvent (mouseUp) {
    if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
        if (lastClick == 0) {
            lastClick = getTimer();
        } else {
            lastClick = 0;
            trace ("double click");
        }
    }
}

onClipEvent (enterFrame) {
    if (lastClick>0) {
        if ((getTimer()-lastClick)>doubleclickDuration) {
            lastClick = 0;
            trace ("single click");
        }
    }
}




Здесь всё логично. Давайте разберём основные блоки кода:

onClipEvent (load) {
    doubleclickDuration = 300;
    lastClick = 0;
}

Код onClipEvent(load) сообщает, что он должен начать работать при запуске муви клипа (т.е. при его полной загрузке), поэтому для инициализации переменных этот блок кода подходит больше всего. Здесь мы объявляем переменную doubleclickDuration. Ей мы присваиваем желательный промежуток времени между двумя кликами мыши, т.е. в нашем случае это значение равно 300 миллисекунд. Другая переменная lastClick используется скриптом во время различных комбинаций щелчков.

onClipEvent (mouseUp) {
    if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
        if (lastClick == 0) {
            lastClick = getTimer();
        } else {
            lastClick = 0;
            trace ("double click");
        }
    }
}

Это самая хитрая часть программы. Первая строка содержит обработчик, который отслеживает событие нажатия кнопки мыши, что бы удостовериться, что нажатие было произведено именно на наш муви клип. (Если быть точнее, то событие mouseUp сгенерируется при отпускании кнопки мыши.) Метод hitTest созданного нами муви клипа мы используем для подтверждения, что именно наша кнопка, и не что иное, была нажата (а кнопка находится в муви клипе – помните? сами же создавали).

В следующей строке мы проверяем, не присвоено ли какое либо значение переменной lastClick. Если нет, то мы знаем, что это первый клик, только что произошедший, так что переменной lastClick мы присваиваем текущее значение таймера.

Но, если же переменной lastClick уже присвоено некое значение, то мы знаем - только что произошёл повторный клик. В этом случае значение переменной lastClick обнуляется, а затем выполняется действие для двойного щелчка мыши. (В данном примере результат посылается в окно сообщений, используя команду trace, но в ваших собственных фильмах вы можете вставлять сюда какие угодно операторы.)

onClipEvent (enterFrame) {
    if (lastClick>0) {
        if ((getTimer()-lastClick)>doubleclickDuration) {
            lastClick = 0;
            trace ("single click");
        }
    }
}

Наконец имеется обработчик события enterFrame, который в каждом кадре проверяет, имеет ли переменная lastClick значение, указывая на недавний щелчок мыши. Если так (т.е. значение имеется), то проверяется, как давно был произведён щелчок, что бы следующий засчитать как двойной. Как только время таймера превышает значение переменной doubleclickDuration, то переменная lastClick обнуляется, и выполняется действие для одинарного клика. Если же очередной клик мыши произошёл через очень короткое, то ничего не происходит до тех пор, пока событие enterFrame не сгенерируется и время не будет повторно проверено.

Замечание: Действие для одинарного клика не выполняется непосредственно по событию mouseUp. Это делается для того, что бы не выполнять действия одинарного клика мгновенно, поскольку он может быть частью двойного клика. Именно поэтому обработчик события mouseUp выполняет известные двойные щелчки, но обработчик события enterFrame позволяет нам подождать и проверить – а был ли двойной клик? Другими словами, будет небольшая задержка перед выполнением действия одиночного щелчка, но действие для двойного щелчка выполнится немедленно.

Перед использованием этого скрипта в своих работах, убедитесь, что протестировали скрипт в тестовом клипе. После этого можете встраивать данную подпрограмму в более сложные клипы.

ПО ВСЕМ ВОПРОСАМ, связанным с Flash, обращайтесь ко мне:

mail@helpexe.ru или help@helpexe.ru.

Обязательно отвечу ВСЕМ !!!


Александр Манжулов, mail@helpexe.ru

http://www.helpexe.ru/


Copyright © 2005 by Александр Манжулов. Все права защищены.
Запрещено частичное или полное воспроизведение
материалов рассылки без согласования с
автором.


Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.paper.flashhelp
Архив рассылки
Отписаться
Вспомнить пароль

В избранное