ActionScript 3.0: отслеживаем вращение колёсика мышки

Использование колёсика мышки для управления флеш-приложениями - это весьма спорное решение (как правило, флеш-ролики воспроизводятся через браузеры, а в браузерах колёсико мышки зарезервировано для просмотра/прокрутки веб-страниц). Но иногда это бывает полезно. Тем более, что реализуется это в ActionScript 3.0 довольно просто. Для этого в арсенале языка имеется специальное событие mouseWheel.

Давайте рассмотрим реальный пример с использованием события mouseWheel: масштабирование объектов при помощи колёсика мышки (такой приём очень часто используется в разнообразных графических редакторах, в том числе, и в Adobe Flash). Итак, смотрим...

Код ActionScript 3.0:

/* импорт классов */ import flash.display.Sprite; import flash.events.MouseEvent; /* создаём спрайт, на котором будем проверять работу с колёсиком мышки */ var sprite:Sprite = new Sprite(); sprite.graphics.beginFill(0xff0000,1); sprite.graphics.drawCircle(0,0,50); sprite.graphics.endFill(); addChild(sprite); sprite.x = 275; sprite.y = 200; /* отслеживаем вращение колёсика мышки */ sprite.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel); /* функция, которая обрабатывает событие MOUSE_WHEEL */ function mouseWheel(event:MouseEvent):void { trace(event.delta) event.target.scaleX = event.target.scaleY += event.delta * 0.01; }

Кроме самого события mouseWheel, здесь мы видим ещё и применение свойства delta. Свойство delta показывает расстояние прокрутки в строках на единицу вращения колесика мыши. Значение у свойства может быть только целым числом, причём не только положительным, но и отрицательным (это зависит от направления прокрутки). Данное свойство, как нетрудно догадаться, доступно только для события mouseWheel.

Результат работы нашего примера:

Удобнее всего данный пример просматривать в отдельном окне.

Приведённый выше - это только один из вариантов использования прокрутки колеса мышки в флеш-проектах. Ещё чаще событие mouseWheel используется при создании прокручиваемых текстовых полей и ScrollBar-ов (смотри пост «Полноэкранный ScrollBar на ActionScript 3.0» или «ScrollBar на ActionScript 3.0»).

Но если фантазия позволяет, то можно придумать и другие сферы применения данного события. Например, в играх-"стрелялках" мы часто сталкиваемся с использованием прокрутки колёсика мышки для смены оружия. Можно попробовать сделать что-то подобное и в флеш-играх...

Код ActionScript 3.0:

/* импорт классов */ import flash.events.MouseEvent; /* переменная, которая хранит номер кадра временной шкалы мувика */ var count:uint = 1; /* мувик, на временной шкале которого находится несколько кадров с изображением оружия */ var mc:Mc = new Mc(); addChild(mc); mc.gotoAndStop(count); mc.x = 20; mc.y = 20; /* отслеживаем вращение колёсика мышки */ stage.addEventListener(MouseEvent.MOUSE_WHEEL, mouseWheel); /* функция, которая обрабатывает событие MOUSE_WHEEL */ function mouseWheel(event:MouseEvent):void { trace(event.delta); if (event.delta > 0) { count++; } else { count--; } if (count<1) { count = mc.totalFrames; } if (count>mc.totalFrames) { count = 1; } mc.gotoAndStop(count); }

Результат:

Смотреть пример в отдельном окне

Пример, конечно, не является законченным, но идею раскрывает :-)

Скачать исходники к данному уроку можно здесь (под Adobe Flash 5.5).

Автор: admin

Дата добавления: 2012-03-05

Просмотров: 8996

Рейтинг поста: +9-

Правила перепечатки

Социальные закладки:
Комментарии:
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-07-24
Хотел ответить попозже, но вы и сами справились. Но позволю пару комментариев к вашему коду:

- никогда не используйте кириллицу в названиях мувиклипов и подобных объектов

- данные о предметах лучше хранить в двумерных массивах, а не одномерных

Если понадобиться сохранять какие-то ещё данные о предметах (поверьте, понадобиться), то возникнет серьёзная проблема. А с двумерными массивами проще:

var arr:Array = [[true,"nameObject_1",100],[true,"nameObject_2",200],[true,"nameObject_3",300]];

Надеюсь, идею уловили :-)

- используйте не 0 и 1, а данные типа Boolean: true (1) и false (0)
Комментатор
Комментарий добавил(а): Человече
Дата добавления: 2013-07-24
Ан нет, всё и у самого получилось. Нужно было только много и много посидеть над кодом. Сейчас осталось реализовать весь функционал игры полностью, и оп - моя первая и одновременно крупная игра - реализовна!!! Сам я украинец , и не могу на русском сказать то что я чуствую, поетому скажу на украинско-русском суржике: щиро дякую, я премного и премного вам благодарен, на вашем блоге я нашел очень много интересной и полезной информации, за это я вам премного благодарен и искренне желаю вам щастья, процветания и ТОП-1 в гугле и яндексе по позициям! :)
Комментатор
Комментарий добавил(а): Человече
Дата добавления: 2013-07-23
В целом, свою первую игрушку я уже почти закончил. К сожалению не могусделать финальный штрих. И прошу вашего совета. Вот я создал масив с предметами:
var mas_inventory_yn:Array = [1, 0, 0, 0, 0, 0, 0];
Единичка значит что можно воспользоваться предметом, ноль - нельзя. А вот код, который перебирает предметы:
stage.addEventListener(KeyboardEvent.KEY_DOWN, mo);
function mo(e:KeyboardEvent):void {
if (e.keyCode == 69) {
з++;
}
else if (e.keyCode == 81) {
з--;
}
if (з<1) {
з = ПЗ.totalFrames;
}
if (з>ПЗ.totalFrames) {
з = 1;
}
if (з == 1) {
stage.addEventListener(Event.ENTER_FRAME, fire);
}
if (з == 2) {
stage.addEventListener(Event.ENTER_FRAME, fire1);
}
ПЗ.gotoAndStop(з);
}

Тут у меня возник вопрос, который и не могу решить. Код дополнительно еще и проверяет масив ,можно ли использовать предмет. И если стоит ноль, использовать нельзя. Вот собственно и сам вопрос: как заставить програмку на автомате перебирать масив далее, пока в масиве не будет найдено единичку? Я пробовал разбить на два кода(на увеличение и уменьшение) и путем пробежки по масиву с if (mas_inventory_yn[i] = 0) {з++/з--}, но что-то не получилось.
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2013-07-14
Рад был помочь :-)
Комментатор
Комментарий добавил(а): Человече
Дата добавления: 2013-07-14
Восхитительно! Очень нужно для моей игрушки. Знаете, подсказали, что нужно делать функции оружия через хмл. Не мог понять что нужно делать, ибо хмл, как по мне, только для вывода строк и таблиц, больше ему применения не вижу :) Недели полторы искал решение через него. А вот сегодня увидел что можно оружие выводить и использовать через массивы. Оставалось только переключение оружия - и этот блог в который раз помог мне! Заменил только в коде на реакцию переключения клавиш и всё. Удачливый день, спасибо! :-)
Комментатор
Комментарий добавил(а): edapskov
Дата добавления: 2012-07-30
Ну, в принципе, это и правильно, что не получается - в вашем случае надо немного иначе делать. Да и вместо колёсика лучше использовать кнопки. А помочь, конечно, могу - пришлите исходник на мой емейл.
Комментатор
Комментарий добавил(а): Дмитрий
Дата добавления: 2012-07-30
Здравствуйте!
Вот у меня есть 168 кадров радарной карты за прошедшую неделю. Они меняются каждый час.
Вот здесь источник: http://www.meteoprog.ua/pictures/satellite/image2.jpg
Я сделал из них обычное видео в mpeg, но мне хотелось бы создать и swf файл с возможностью перехода по кадрам с помощью колесика. Flash ранее не занимался, а представить доказательства аномальной жары в России очень хочу. Импортировал все 168 снимков. Закрутил в цикле. А попробовал вставить Ваш скрипт как действие с первого кадра, и не получается. Просто крутится по циклу и все. Поможете сделать swf со своим скриптом №2?
Добавить комментарий:







[ + ] помощь по форматирование текста

Идиот-тест

Если все обязательные поля (отмечены * ) заполнены необходимой информацией, то нажимаем кнопку Добавить комментарий.

Меню
Подписка
Рубрики
Метки
Последние комментарии
Рейтинг постов
Реклама
Друзья
География гостей
Статистика
Яндекс.Метрика