IV. Объектное программирование на Action Script — КиберПедия 

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

IV. Объектное программирование на Action Script

2017-06-19 80
IV. Объектное программирование на Action Script 0.00 из 5.00 0 оценок
Заказать работу

Объект представляет собой совокупность свойств и методов. Каждое свойство имеет имя и значение. Метод представляет собой функцию. В пятом Flash существуют предопределённые объекты.

Array;Boolean;Color;Date;Key;Math;MovieClip;Number;Object;Selection;Sound;String;XML;XMLSocket

Для использования их методов и свойств необходимо в редакторе выбрать Objects, а затем нужный объект. Например, для присвоения переменной x числа пи, необходимо использовать свойство PI предопределённого объекта Math.

x=Math.E;

Для того что бы скрыть указатель мыши необходимо задействовать метод Hide() объекта Mouse т.е.

mouse.hide();

 

Создание интерактивного пользовательского указателя мыши

Рассмотрим реальный пример. Пусть требуется скрыть указатель мыши а вместо него вывести свой.

Начнём с создания указателя. Самостоятельно создайте экземпляр клипа, возможно, содержащий анимацию, который будет служить новым указателем мыши.

Задайте Instance Name экземпляру. Прикрепите к клипу следующий скрипт

onClipEvent(load){

Mouse.hide()

startDrag(this, true);

}

Событие Load показывает, что данный скрипт исполнится лишь однажды, при загрузке ролика. Строка Mouse.hide() вызывает метод объекта Mouse, скрывающий указатель мыши. StartDrag – старая знакомая команда из Flash4 включающая перетаскивание клипа и располагающая мышь по его центру. Подробное описание команды смотрите в приложении. В качестве имени клипа указано this так как скрипт принадлежит клипу который собственно и перетаскивается.

Теперь усложним поведение нового указателя. Пусть он меняет свой размер в зависимости от своей координаты, например, увеличисается по мере удаления от левой границы. К существующему скрипту добавьте новое событие entterframe так как скрипт должен постоянно изменять размер указателя мыши. Для решения необходимо ввести скрипт

onClipEvent (enterFrame) {

this._xscale = _root._xmouse;

}

Упраженеие

Теперь, в центре ролика указатель должен быть большим, а при перемещении мыши к границам сцены – уменьшаться. Для этих целей сгодится функция синус, которая в пятом Flash является методом объекта Math. Функция известна тем, что при значении аргумента pi/2 принимает максимальное значение, а при значениях 0 и pi равна нулю.

Мониторинг столкновений клипов с мышью и друг с другом.

Для данной цели служит метод hitTest. Данный метод возвращает значение True, если столкновение имеет место и False, если столкновения нет. Для проверки столкновения друк клипов используется синтаксис anyMovieClip.hitTest(target). Исследуем работу метода на нескольких примерах. Создайте на сцене два экземпляра клипов с именами “q” и “w”. Прикрепите к клипу с именем “q” следующий скрипт

onClipEvent (Load) {

trace (this.hitTest(_root.w))

}

Откомпилируйте ролик. Обратите внимание, что если клипы не пересекаются, то в окне Output появляется false, а если пересекаются, то true. Следует, также заметить, что в данном случае анализируется именно пересечение прямоугольников, в которые вписаны клипы. На рисунке показаны два экземпляра клипов неправильной формы. Несмотря на то, что области заливки, образующие клипы не касаются друг друга, метод hitTest возвращает значение true.

Теперь исследуем мониторинг столкновения указателя мыши и клипа. В этом случае необходимо использовать синткаксис AnyMovieClip.hitTest(_root._xmouse, _root._ymouse, Flag); Где Flag -

onClipEvent (enterFrame) {

_root.t= _root.q.hitTest(_root._xmouse, _root._ymouse, 1);

}

Перетаскивание клипов.

В четвёртой версии Flash, для того что бы перетасквать клипы, в них приходилось помещать кнопки со скриптом, включающим перетаскивание текущего клипа. Такую технологию можно использовать и в пятой версии. Создайте на сцене экземпляр клипа, войдите в его редактирование двойным щелчком и преобразуйте изображение в кнопку. Прикрепите ко кнопке скрипт.

on (press) {

startDrag (this);

}

on (release) {

stopDrag ();

}

Вернитесь на сцену двойным щелчком вне кнопки. Создайте на сцене несколько экземпляров данного клипа (например, перемещая его при нажатой клавише Ctrl). Откомпилируйте ролик. На каждом из экземпляров клипа мышь превращается в пальчик (клипы содержат в себе кнопки). Все экземпляры клипов теперь можно независимо перемещать по сцене.

А можно ли обойтись без кнопок, прикрепив скрипт непосредственно к кипу.

Попробуем, тем более, кто в качестве аргумента onClipEvent можно использовать mouseDown и mouseUp.

Создайте на сцене новый экземпляр клипа и прикрепите к нему скрипт

onClipEvent (mouseDown) {

startDrag (this);

}

onClipEvent (mouseUp){ stopdrag();

}

Откомпилируйте ролик. Ура! Работает! А теперь создайте несколько копий данного экземпляра на сцене и попробуйте перетаскивать их. Увы, почему то перетаскивается только один. Более того, если мышь нажимать и на свободном пространстве, всё равно перетаскивается один из клипов. Дело в том, что событие mousDown происходит независимо от положения указателя мыши, причём происходит одновременно во всех экземплярах клипов! Это легко проверить. Модифицируйте скрипты клипов так

onClipEvent (mouseDown) {

startDrag (this);

trace(this) }

onClipEvent (mouseUp){ stopdrag();

}

Не забудьте, что придётся модифицировать скрипт каждого из экземпляров! Теперь при событии mouseDown в окне Output клип будет писать своё имя. Откомпилируйте ролик. При нажатии мыши в любой части сцены в окне Output появятся имена всех экземпляров.

_level0.instance3

_level0.instance2

_level0.instance1

Что и требовалось доказать. Но проблему всё же можно решить используя метод hitTest для проверки того, над каким из клипов в данный момент находится указатель мыши.

Скримпт this.hitTest(_root._xmouse, _root._ymouse, 1), прикреплённый к клипу будет, возвращать True, если мышь находится над клипом, и False – если мышь вне клипа. Таким образом, используя оператор if можно добиться включения перетаскивания лишь нужного клипа. Итак, окончательно, скрипт клипов должен выглядить так

onClipEvent (mouseDown) {

if (this.hitTest(_root._xmouse, _root._ymouse, 1))

{ startDrag (this);

}

}

onClipEvent (mouseUp){ stopdrag();

}


Поделиться с друзьями:

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...

Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.015 с.