Статьи

Создайте красочное вращающееся колесо во Flash с AS3

В этом уроке вы узнаете, как создать вращающееся колесо с использованием Flash и AS3, с интерфейсом, который подходит как для устройств на основе мыши, так и на сенсорных устройствах.


Давайте посмотрим на конечный результат, к которому мы будем стремиться:

Нажмите и перетащите мышь вертикально, чтобы вращать колесо; Чем длиннее линия, которую вы перетаскиваете, тем быстрее будет вращаться колесо! Как только он остановится, цветная полоса внизу покажет цвет, на котором приземлилось колесо.


Используя готовые графические элементы, мы создадим красочный интерфейс, который будет работать на нескольких классах ActionScript 3.

Пользователь сможет вращать колесо, используя жест перетаскивания, представленный линией на экране; более высокая линия будет быстрее вращаться.


Откройте Flash и создайте документ размером 500×300 пикселей. Установите частоту кадров 24 кадра в секунду.


Будет отображен красочный красивый интерфейс, состоящий из нескольких фигур, мувиклипов и многого другого.
Простые формы были созданы с использованием инструментов рисования Flash Pro, и, поскольку их легко дублировать, я не буду объяснять их создание. Убедитесь, что точка вращения колеса находится в центре.

Вы всегда можете посмотреть FLA в исходных файлах загрузки .


На изображении выше показаны имена экземпляров различных видеороликов. Обратите особое внимание на wheel.p MovieClips; это маленькие черные линии, которые разделяют цвета в колесе и находятся внутри wheel MovieClip. Они называются от p1 до p10 часовой стрелке.


Мы будем использовать другой движок анимации движения, отличный от стандартного, включенного во Flash; это значительно облегчит переход colorMC символа colorMC .

Вы можете скачать TweenMax с веб-сайта Greensock .


Добавьте имя класса Main в поле Class в разделе Publish панели Properties, чтобы связать FLA с классом Main .


Создайте новый (Cmd + N) класс ActionScript 3.0 и сохраните его как Main.as в папке вашего класса.


Создайте базовую структуру классов, чтобы начать писать код.

01
02
03
04
05
06
07
08
09
10
11
12
package
{
    import flash.display.Sprite;
     
    public class Main extends Sprite
    {
        public function Main():void
        {
            // constructor code
        }
    }
}

Это классы, которые нам нужно импортировать, чтобы наш класс работал. Директива import делает внешние классы и пакеты доступными для вашего кода.

1
2
3
4
5
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.MouseEvent;
import flash.events.Event;
import com.greensock.TweenMax;

Эти переменные мы будем использовать; Прочитайте комментарии в коде, чтобы узнать о них больше:

1
2
3
4
private var speed:Number = 0;
private var paddles:Vector.<Sprite> = new Vector.<Sprite>();
private var line:Shape;
private var lastPaddle:String;

Конструктор — это функция, которая запускается, когда объект создается из класса, и первая, которая выполняется при создании экземпляра объекта. Так как это наш класс документа, он будет запущен, как только загрузится SWF.

1
2
3
4
public final function Main():void
{
    //code…
}

Сначала мы добавляем различные манипуляторы MovieClips к вектору и добавляем слушатели — мы напишем функцию listeners() далее.

1
2
3
4
5
public final function Main():void
{
    paddles.push(wheel.p1, wheel.p2, wheel.p3, wheel.p4, wheel.p5, wheel.p6, wheel.p7, wheel.p8, wheel.p9, wheel.p10);
    listeners(‘add’);
}

Эта функция добавит или удалит слушателей в соответствии с параметром. Слушатели мыши настроены на рисование линии, которая будет управлять колесом.

01
02
03
04
05
06
07
08
09
10
11
12
13
private final function listeners(action:String):void
{
    if(action == ‘add’)
    {
        stage.addEventListener(MouseEvent.MOUSE_DOWN, startDraw);
        stage.addEventListener(MouseEvent.MOUSE_UP, spinWheel);
    }
    else
    {
        stage.removeEventListener(MouseEvent.MOUSE_DOWN, startDraw);
        stage.removeEventListener(MouseEvent.MOUSE_UP, spinWheel);
    }
}

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

1
2
3
4
5
6
7
8
9
private final function startDraw(e:MouseEvent):void
{
    line = new Shape();
    addChild(line);
 
    line.graphics.moveTo(mouseX, mouseY);
    line.graphics.lineStyle(8, 0x000000, 0.3);//you can change the line color and style here
    stage.addEventListener(MouseEvent.MOUSE_MOVE, drawLine);
}

Пока мышь перемещается, линия продолжается в этом направлении.

1
2
3
4
private final function drawLine(e:MouseEvent):void
{
    line.graphics.lineTo(mouseX, mouseY);
}

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

01
02
03
04
05
06
07
08
09
10
11
private final function spinWheel(e:MouseEvent):void
{
    stage.removeEventListener(MouseEvent.MOUSE_MOVE, drawLine);
    listeners(‘rm’);
 
    speed = line.height * 0.1;
    removeChild(line);
    line = null;
 
    stage.addEventListener(Event.ENTER_FRAME, spin);
}

Это функция, которая вращает колесо и определяет его значение:

1
2
3
4
5
private final function spin(e:Event):void
{
    /* Rotate Wheel */
 
    wheel.rotationZ += speed;

Здесь мы определяем текущее значение колеса на основе последнего прикосновения к нему.

1
2
3
4
5
6
7
8
9
/* Detect Value */
 
for(var i:int = 0; i < 10; i++)
{
    if(indicator.hArea.hitTestObject(paddles[i]))
    {
        lastPaddle = paddles[i].name;
    }
}

Скорость колеса уменьшается каждый кадр, чтобы в конечном итоге остановить вращение.

1
2
3
/* Decrease speed */
 
speed -= 0.1;

Все значения сбрасываются, когда колесо останавливается. Вызывается функция, которая запускает действие в соответствии с конечным значением.

01
02
03
04
05
06
07
08
09
10
    /* Remove listener and reset speed when wheel stops */
 
    if(speed <= 0)
    {
        stage.removeEventListener(Event.ENTER_FRAME, spin);
        speed = 0;
        setBarColor(lastPaddle);
        listeners(‘add’);
    }
}

Эта функция будет запускать пользовательское действие в соответствии с последним значением колеса. В этом случае он меняет цвет нижней панели, но вы можете сделать что-нибудь еще.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function setBarColor(action:String):void
{
    switch(action)
    {
        case ‘p1’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xF15D5D, tintAmount:1}});
            break;
        case ‘p2’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xC06CA8, tintAmount:1}});
            break;
        case ‘p3’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x644D9B, tintAmount:1}});
            break;
        case ‘p4’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x5E98C6, tintAmount:1}});
            break;
        case ‘p5’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x4789C2, tintAmount:1}});
            break;
        case ‘p6’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x55C4CB, tintAmount:1}});
            break;
        case ‘p7’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x57BC80, tintAmount:1}});
            break;
        case ‘p8’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x90CC6C, tintAmount:1}});
        break;
        case ‘p9’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xEBE666, tintAmount:1}});
        break;
        case ‘p10’:
            TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xF29C69, tintAmount:1}});
            break;
    }
}

Измените код, чтобы выполнить свои собственные действия!

Надеюсь, вам понравился этот урок, спасибо за чтение!