Использование колёсика мышки для управления флеш-приложениями - это весьма спорное решение (как правило, флеш-ролики воспроизводятся через браузеры, а в браузерах колёсико мышки зарезервировано для просмотра/прокрутки веб-страниц). Но иногда это бывает полезно. Тем более, что реализуется это в 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).
- никогда не используйте кириллицу в названиях мувиклипов и подобных объектов
- данные о предметах лучше хранить в двумерных массивах, а не одномерных
Если понадобиться сохранять какие-то ещё данные о предметах (поверьте, понадобиться), то возникнет серьёзная проблема. А с двумерными массивами проще:
var arr:Array = [[true,"nameObject_1",100],[true,"nameObject_2",200],[true,"nameObject_3",300]];
Надеюсь, идею уловили :-)
- используйте не 0 и 1, а данные типа Boolean: true (1) и false (0)