Перепишем обработчик события load . Он будет выглядеть так:
onClipEvent(load) {
Mouse.hide();
this.startDrag(true);
}
Вот теперь все работает, как надо.
Добавим к сказанному, что можно задать область, в которой будет действовать созданный нами фигурный курсор мыши. Для этого достаточно изменить второе выражение приведенного выше обработчика:
this.startDrag(true, 200, 100, 600, 400);
После этого наш фигурный курсор будет "заперт" в указанных границах.
Выявление совпадений и касаний
Часто бывает нужно знать, находится ли заданная точка внутри какого-либо элемента изображения или касаются ли друг друга два элемента. Эта задача — выявление совпадений и касаний — решается в разных случаях по-разному. И, как правило, ее зачастую весьма непростое решение должно быть найдено программистом.
В нашем случае, однако, все намного проще. Разработчики Flash предусмотрели в объекте movieClip особый метод hitTest . С его помощью мы можем проверить, находится ли заданная точка внутри клипа или касаются ли друг друга два отдельных клипа.
Метод hitTest имеет два формата вызова. Первый из этих форматов позволяет выяснить совпадение точки и клипа:
<���Клип>. hitTest(<���Х>, , <���Проверять контур >);
Понятно, что первые два параметра определяют соответственно горизонтальную и вертикальную координаты нужной нам точки. Третий параметр имеет логический тип и позволяет указать, что считать границами клипа. Если этот параметр имеет значение true , Flash считает границами клипа контур содержащейся в нем графики. В случае значения false Flash "мысленно" вписывает клип в невидимый прямоугольник и считает границами клипа его контур.
Если заданная точка находится внутри клипа, метод hitTes t возвращает значение true . В противном случае — значение false . Возвращаемое значение можно использовать в условном выражении или где-либо еще.
Давайте проверим, как работает этот метод. Создадим новый клип, представляющий собой сложную фигуру из множества кривых. Поместим его на рабочий лист и присвоим ему имя hit . После этого привяжем к этому клипу такой обработчик события enterFrame :
onClipEvent(enterFrame) {
if (this.hitTest(_root._xmouse, _root._ymouse, true)) {
this._alpha = 50;
} else { this._alpha = 100;
}
}
Этот сценарий-обработчик события проверяет, находится ли курсор мыши внутри контура нашего клипа. Если это так, клип делается полупрозрачным, в противном случае — полностью непрозрачным (видимым).
В нашем случае метод hitTest проверяет только "попадание" в сам клип, поскольку его третий параметр имеет значение true . Если же передать значение false , то метод станет проверять попадание в воображаемый прямоугольник, описанный вокруг нашего клипа. Это более грубая проверка совпадения точки и клипа.
Второй формат метода hitTest позволит нам проверить на совпадение два различных клипа, т. е. проверить, накладываются они друг на друга или перекрываются:
<���Клип !>.hitTest (<���Клип 2 >);
В этом случае метод hitTest проверяет "попадание" не фигуры в фигуру, а воображаемого прямоугольника, описанного вокруг первой фигуры, в воображаемый прямоугольник, описанный вокруг второй фигуры. Следовательно, метод ведет себя так, словно его в данный момент не существующий третий параметр имеет значение false .
Нам осталось проверить работу метода. Создадим новый образец-клип со сложной фигурой, поместим его экземпляр на рабочий лист, сделаем его поменьше и назовем cursor . К первому (и единственному) кадру фильма привяжем вот такой небольшой сценарий:
_root.cursor.startDrag(true);
Этот сценарий заставляет клип cursor двигаться за мышью, т. е. превращает его в фигурный курсор.
Теперь напишем сценарий-обработчик события enter Frame для клипа hit , так чтобы он проверял касание клипов cursor и hit одного другим:
onClipEvent(enterFrame) {
if (this.hitTest(_root.cursor)) {
this._alpha = 50;
} else { this._alpha = 100;
}
}
Хоть Flash и предоставляет мощные средства рисования графики и создания анимации, иногда бывает нужно кое-что дорисовать уже во время воспроизведения фильма. Например, если мы собираемся создать фильм, который в процессе воспроизведения будет выводить на рабочий лист график какой-либо функции, нам потребуются средства для рисования этого самого графика. Что в этом случае может предложить нам Flash?
Читать дальше
Конец ознакомительного отрывка
Купить книгу