Статьи

Используйте панель проекта Flash для создания динамического меню AS3

В этом уроке мы будем использовать панель проекта во Flash для создания вертикального анимированного меню AS3. Весь процесс позволит вам легко настроить все аспекты меню, используя параметризованные конструкторы. Читайте дальше, чтобы узнать больше!


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


Начните с создания нового проекта. Откройте Flash и выберите «Файл»> «Создать», затем выберите «Проект Flash». Панель проекта появится.

простое учебное пособие по Flash меню

В раскрывающемся списке «Проекты» выберите «Новый проект». Введите название проекта «AnimatedMenu». В корневой папке найдите и выберите, куда вы хотите сохранить проект; Вы можете выбрать уже существующую папку или создать новую. Убедитесь, что версия ActionScript установлена ​​на ActionScript 3.0, и нажмите «Создать проект».

простое учебное пособие по Flash меню

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

простое учебное пособие по Flash меню

В этом уроке мы будем использовать классы TweenLite от GreenSock для анимации, поэтому нам нужно добавить его в наш проект. Скачайте и распакуйте его, поместите в папку вашего проекта (так что у вас будет AnimatedMenu / com / greensock /).

Теперь, если вы обновите панель Project, вы увидите следующую структуру:

простое учебное пособие по Flash меню

Щелкните значок «Новый файл» на панели «Проект», чтобы создать новый файл, назовите его «AnimatedMenu.fla» (убедитесь, что тип файла — «Flash-файл») и нажмите «Создать файл».

простое учебное пособие по Flash меню

Установите размер сцены 600x350px.

простое учебное пособие по Flash меню

Выберите папку «Классы» и щелкните значок «Новый файл», установите тип файла «ActionScript», назовите его «Основной». Это будет наш класс документов, если вы не знакомы с классами документов, этот краткий совет по использованию класса документов поможет вам.

простое учебное пособие по Flash меню

Это позволит нам использовать любой класс, расположенный в нашей папке Classes, без необходимости изменять имя пакета. Перейдите в «Файл»> «Параметры публикации», выберите вкладку «Flash» и нажмите «Параметры ActionScript». Нажмите кнопку «Добавить новый путь» и введите относительный путь «./Classes».

простое учебное пособие по Flash меню

Внутри пакета Classes импортируйте класс Sprite и используйте его для расширения класса «Main». Вот код:

1
2
3
4
5
6
package Classes
{
    import flash.display.Sprite;
 
    public class Main extends Sprite
    {

Это переменные, которые мы будем использовать ( MenuItem — это класс ActionScript, который мы создадим позже)

1
2
3
4
private var item1:MenuItem;
private var item2:MenuItem;
private var item3:MenuItem;
private var item4:MenuItem;

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

1
2
public function Main():void
{

Создайте экземпляр класса MenuItem, чтобы создать четыре элемента меню с разными цветами, метками, функциями и позициями:

1
2
3
4
5
//Create four instances of the MenuItem class and spacify the parameters (x,y,color,label,URL).
item1 = new MenuItem(100,60,0x28D9E9,»Home page»,»http://active.tutsplus.com/»);
item2 = new MenuItem(140,150,0xA8FA2D,»Services»,»http://psd.tutsplus.com/»);
item3 = new MenuItem(120,240,0xFC30FC,»About me»,»http://net.tutsplus.com/»);
item4 = new MenuItem(160,330,0xEE2B2B,»Contacts»,»http://vector.tutsplus.com/»);

Вы можете изменить URL-адреса, чтобы они указывали на другие сайты.


Этот код просто добавляет четыре элемента, созданные ранее на сцене.

1
2
3
4
5
//Add the items to the stage.
addChild(item1);
addChild(item2);
addChild(item3);
addChild(item4);

Теперь мы закончили с классом Main, вот полный код этого класса.

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
package Classes
{
    import flash.display.Sprite;
 
    public class Main extends Sprite
    {
        private var item1:MenuItem;
        private var item2:MenuItem;
        private var item3:MenuItem;
        private var item4:MenuItem;
 
        public function Main():void
        {
            //Create four instances of the MenuItem class and spacify the parameters (x,y,color,label,URL).
            item1 = new MenuItem(100,60,0x28D9E9,»Home page»,»http://active.tutsplus.com/»);
            item2 = new MenuItem(140,150,0xA8FA2D,»Services»,»http://psd.tutsplus.com/»);
            item3 = new MenuItem(120,240,0xFC30FC,»About me»,»http://net.tutsplus.com/»);
            item4 = new MenuItem(160,330,0xEE2B2B,»Contacts»,»http://vector.tutsplus.com/»);
             
            //Add the items to the stage.
            addChild(item1);
            addChild(item2);
            addChild(item3);
            addChild(item4);
        }
    }
}

Этот класс слишком короткий, чтобы выполнять все функции, которые должно выполнять наше меню, поэтому мы создадим класс «MenuItem.as», который содержит необходимые функции для нашего меню.


Добавьте новый файл ActionScript 3 в папку «Классы» точно так же, как вы это сделали для Main.as. Назовите это «MenuItem.as».

простое учебное пособие по Flash меню

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

01
02
03
04
05
06
07
08
09
10
11
12
13
package Classes
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import com.greensock.*;
    import com.greensock.TweenLite;
    import com.greensock.easing.*;
    import com.greensock.plugins.*;
    import flash.text.TextField;
    import flash.media.Sound;
    import flash.net.navigateToURL;
    import flash.net.URLRequest;

MenuItem класс MenuItem (должен иметь то же имя, что и его имя файла «MenuItem») и расширить класс Sprite.

1
2
public class MenuItem extends Sprite
{

Это те переменные, которые нам нужны на данный момент, позже мы добавим некоторые другие по мере продвижения в этом уроке.

1
2
3
4
5
6
private var rect1:DynamicMovie = new DynamicMovie();
private var rect2:DynamicMovie = new DynamicMovie();
private var rect3:DynamicMovie = new DynamicMovie();
private var X:Number;
private var Y:Number;
private var Color:uint;

DynamicMovie — это класс AS3, основанный на старом классе AS2, написанном Дарроном Шаллом ; этот класс AS3 расширяет MovieClip и добавляет новый набор свойств ( x2, y2, rotation2, scaleX2, scaleY2, mouseX2, mouseY2 ), которые позволяют вам манипулировать спрайтом на основе контекстной точки регистрации, которую можно установить с помощью setRegistration() ,

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


Вы найдете этот класс в исходной папке этого руководства или вы можете скачать его с сайта oscartrelles.com , а затем просто поместить его в папку классов, чтобы он мог быть распознан нашим кодом.

простое учебное пособие по Flash меню

Это конструктор MenuItem.

01
02
03
04
05
06
07
08
09
10
11
12
public function MenuItem(posX:Number, posY:Number,color:uint,Title:String,URL:String)
{
    //Get the position and color parameters.
    X = posX;
    Y = posY;
    Color = color;
             
    // Call the addRect function to add 3 rectangles with the specified parameters.
    addRect(rect1,X-12,Y,360,62,Color,0.3,3);
    addRect(rect2,X-4,Y,360,62,Color,0.4,0);
    addRect(rect3,X,Y,360,62,Color,0.7,-2);
}

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

1
2
3
4
5
6
7
8
private function addRect(rect:DynamicMovie,X:Number, Y:Number, width:Number, height:Number,color:uint, alpha:Number, rotation:Number)
{
    rect.setRegistration(X+(width/2),Y+(height/2));
    rect.graphics.beginFill(color,alpha);
    rect.graphics.drawRect(X,Y,width,height);
    addChild(rect);
    rect.rotation2 = rotation;
}

Теперь вы можете проверить это, и вы увидите это:

Конечно, мы не можем назвать это меню, если мы не добавим некоторые ярлыки. Мы разберемся с этим на следующем шаге.


Вернитесь в файл AnimatedMenu.fla и добавьте новый символ (Ctrl + F8); назовите его «Text_mc» и выберите «Экспорт для ActionScript».

простое учебное пособие по Flash меню

Теперь внутри этого символа добавьте динамическое TextField размером 160×30 пикселей, используя Text Tool (T). Это шрифт, который я использовал: Creampuff Regular , 24px, #FFFFFF. Назовите экземпляр «txtLabel».

Выберите TextField и перейдите в « Окно»> «Выровнять» (Ctrl + K) и нажмите кнопки «Выровнять левый край» и «Выровнять верхний край» (убедитесь, что установлен флажок «Выровнять по этапу»)

простое учебное пособие по Flash меню

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

Перейдите в меню «Текст»> «Внедрение шрифтов», присвойте ему имя (например, «Font1»), выберите шрифт Creampuff в поле со списком «Семейство», в диапазонах символов выберите все прописные и строчные буквы, затем нажмите кнопку «плюс». расположен в левой части. Смотрите изображение ниже:

простое учебное пособие по Flash меню

Чтобы добавить метки к пунктам меню, мы собираемся создать экземпляр Text_mc MovieClip. Добавьте эту строку кода к переменным в файле MenuItem.as .

1
private var txt:Text_mc = new Text_mc();

Теперь мы должны присвоить TextField заголовок, указанный в параметрах конструктора.

Добавьте этот код в конец конструктора.

1
2
3
4
5
//Assign a title to the TextField and place it.
txt.txtLabel.text = Title;
txt.x = X + 70;
txt.y = Y + 16;
addChild(txt);

Вот что вы должны получить:

На следующих шагах мы добавим некоторые функции для анимации меню.


Чтобы превратить наш пункт меню в кнопку, мы должны добавить над ним прозрачный прямоугольник и установить для buttonMode значение true . Так что добавьте эту переменную в список переменных.

1
private var menuButton:DynamicMovie = new DynamicMovie();

В конце конструктора добавьте этот код:

1
2
3
//Use the addRect function to draw a transparent rectangle over the menu item.
addRect(menuButton,X-10,Y-5,380,80,Color,0,0);
buttonMode = true;

Добавьте следующие слушатели событий в menuButton в конце конструктора.

1
2
3
menuButton.addEventListener(MouseEvent.MOUSE_OVER,mouseOver);
menuButton.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
menuButton.addEventListener(MouseEvent.CLICK,mouseClick);

Эта функция будет вызываться, когда мышь находится над menuButton .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
private function mouseOver(e:MouseEvent)
{
    var timeline:TimelineLite = new TimelineLite();
     
    //Rotate the rectangels.
    new TweenLite(rect1,.3,{rotation2:-4});
    new TweenLite(rect2,.3,{rotation2:0});
    new TweenLite(rect3,.3,{rotation2:5});
 
    //Tween the text.
    timeline.append(new TweenLite(txt,.3,{x:X+45,scaleX:1.1,scaleY:1.1}));
    timeline.append(new TweenLite(txt,.3,{x:X+70,alpha:1}));
 
    //Add a Glow Filter to the text.;
    new TweenMax(txt,.3,{glowFilter:{color:0xffffff,alpha:1,blurX:5,blurY:5,strength:1,quality:3}});
}

Здесь мы используем классы GreenSock TimelineLite и TweenMax для анимации кнопки. Поищите на сайте Activetuts + дополнительные учебники по GreenSock .


Когда мышь отсутствует, эта функция вернет меню в исходное положение.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
private function mouseOut(e:MouseEvent)
{
    var timeline:TimelineLite = new TimelineLite();
             
    //Rotate the rectangles to their initial position.
    new TweenLite(rect1,.3,{rotation2:3});
    new TweenLite(rect2,.3,{rotation2:0});
    new TweenLite(rect3,.3,{rotation2:-2});
 
    //backward the text animation.
    timeline.append(new TweenLite(txt,.3,{x:X+65,alpha:.9}));
    timeline.append(new TweenLite(txt,.3,{x:X+70}));
    new TweenMax(txt,.3,{glowFilter:{color:0xffffff,alpha:0,blurX:0,blurY:0,strength:0,quality:3}});
}

Эта функция откроет указанный URL при нажатии на пункт меню.

1
2
3
4
5
private function mouseClick(e:MouseEvent)
{
    //Open the requested URL.
    navigateToURL(new URLRequest(myURL));
}

Вы должны добавить эту переменную в список переменных.

1
private var myURL:String;

И добавьте эту инструкцию в конструктор.

1
myURL = URL;

Это то, что вы должны получить. Переверните меню, чтобы увидеть анимацию.

Теперь давайте добавим крутой эффект пузырей.


Эта функция создаст несколько пузырьков со случайным положением, размером и альфа в двух направлениях. Это код:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private function bubbles(position:Number,direction:Number)
{
    //Create 50 bubbles, you can modify the number to get more or less bubbles.
    for (var i=0; i<50; i++)
    {
        var bubble:DynamicMovie= new DynamicMovie();
 
        //Set the registration point for the current bubble.
        bubble.setRegistration(X+position,Y);
 
        //Give the bubble the same color as the menu item and a random alpha (but greater than 0.2).
        bubble.graphics.beginFill(Color,Math.random()+0.2);
 
        //draw a circle with a random position and radius.
        bubble.graphics.drawCircle(X + position + Math.random() * i,Y + 55 — Math.random() * i,Math.random()*5);
 
        //add the bubble at the third index so that it is under the menuButton.
        addChildAt(bubble,3);
 
        //Tween the Bubble randomly according to the direction.
        new TweenLite(bubble,Math.random() + 1,{x2:X — 80 * direction + position — Math.random() * i,y2:Y — Math.random() * i,alpha:0,ease:Circ.easeOut});
    }
}

Нам нужно вызывать функцию bubbles() когда мышь наводит курсор на пункт меню. Поэтому добавьте этот код в mouseOver() :

1
2
3
4
5
//Left bubbles.
bubbles(70,1);
             
//Right bubbles
bubbles(270,-1);

Вот что мы получаем:


Мы закончим, добавив звуковой эффект в меню, когда оно наведено мышью. Для этого загрузите звук отсюда (скачайте mp3 файл). Затем импортируйте его в библиотеку: « Файл»> «Импорт»> «Импорт в библиотеку» . Переименуйте его в «MySound.mp3».

простое учебное пособие по Flash меню

Откройте его свойства и нажмите «Дополнительно»; В окне отобразится дополнительный контент, выберите «Экспорт для ActionScript» и назовите класс «MySound».

простое учебное пособие по Flash меню

Чтобы добавить звуковой эффект, создайте экземпляр импортированного ранее звука в библиотеку и воспроизведите его. Поместите этот код в mouseOver() .

1
2
var mySound:MySound = new MySound();
mySound.play();

Мы сделали с нашим меню! Вот полный код MenuItem.as:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import com.greensock.*;
    import com.greensock.TweenLite;
    import com.greensock.easing.*;
    import com.greensock.plugins.*;
    import flash.text.TextField;
    import flash.media.Sound;
    import flash.net.navigateToURL;
    import flash.net.URLRequest;
 
    public class MenuItem extends Sprite
    {
        private var rect1:DynamicMovie = new DynamicMovie();//Use the DynamicMovie class instead of Sprite class.
        private var rect2:DynamicMovie = new DynamicMovie();//This allow us to change the registration point.
        private var rect3:DynamicMovie = new DynamicMovie();//So we can rotate the rectangels around their centers.
        private var menuButton:DynamicMovie = new DynamicMovie();
        private var X:Number;
        private var Y:Number;
        private var Color:uint;
        private var txt:Text_mc = new Text_mc();
        private var myURL:String;
 
        public function MenuItem(posX:Number, posY:Number,color:uint,Title:String,URL:String)
        {
            //Get the position and color parameters.
            X = posX;
            Y = posY;
            Color = color;
            myURL = URL;
 
            // Call the addRect function to add 3 rectangles with the specified parameters.
            addRect(rect1,X-12,Y,360,62,Color,0.3,3);
            addRect(rect2,X-4,Y,360,62,Color,0.4,0);
            addRect(rect3,X,Y,360,62,Color,0.7,-2);
 
            //Assign a title to the TextField and place it.
            txt.txtLabel.text = Title;
            txt.x = X + 70;
            txt.y = Y + 16;
            addChild(txt);
 
            //Use the addRect function to draw a transparent rectangle over the menu item.
            addRect(menuButton,X-10,Y-5,380,80,Color,0,0);
            buttonMode = true;
 
            menuButton.addEventListener(MouseEvent.MOUSE_OVER,mouseOver);
            menuButton.addEventListener(MouseEvent.MOUSE_OUT,mouseOut);
            menuButton.addEventListener(MouseEvent.CLICK,mouseClick);
        }
 
        private function addRect(rect:DynamicMovie,X:Number, Y:Number, width:Number, height:Number,color:uint, alpha:Number, rotation:Number)
        {
            rect.setRegistration(X+(width/2),Y+(height/2));
            rect.graphics.beginFill(color,alpha);
            rect.graphics.drawRect(X,Y,width,height);
            addChild(rect);
            rect.rotation2 = rotation;
        }
 
        private function mouseOver(e:MouseEvent)
        {
            var timeline:TimelineLite = new TimelineLite();
            var mySound:MySound = new MySound();
            mySound.play();
 
            //Rotate the rectangels.
            new TweenLite(rect1,.3,{rotation2:-4});
            new TweenLite(rect2,.3,{rotation2:0});
            new TweenLite(rect3,.3,{rotation2:5});
 
            //Tween the text.
            timeline.append(new TweenLite(txt,.3,{x:X+45,scaleX:1.1,scaleY:1.1}));
            timeline.append(new TweenLite(txt,.3,{x:X+70,alpha:1}));
 
            //Add a Glow Filter to the text.;
            new TweenMax(txt,.3,{glowFilter:{color:0xffffff,alpha:1,blurX:5,blurY:5,strength:1,quality:3}});
 
            //Left bubbles.
            bubbles(70,1);
 
            //Right bubbles
            bubbles(270,-1);
        }
 
        private function mouseOut(e:MouseEvent)
        {
            var timeline:TimelineLite = new TimelineLite();
 
            //Rotate the rectangles to their initial position.
            new TweenLite(rect1,.3,{rotation2:3});
            new TweenLite(rect2,.3,{rotation2:0});
            new TweenLite(rect3,.3,{rotation2:-2});
 
            //backward the text animation.
            timeline.append(new TweenLite(txt,.3,{x:X+65,alpha:.9}));
            timeline.append(new TweenLite(txt,.3,{x:X+70}));
            new TweenMax(txt,.3,{glowFilter:{color:0xffffff,alpha:0,blurX:0,blurY:0,strength:0,quality:3}});
        }
 
        private function mouseClick(e:MouseEvent)
        {
            //Open the requested URL.
            navigateToURL(new URLRequest(myURL));
        }
 
        private function bubbles(position:Number,direction:Number)
        {
            //Create 50 bubble, you can modify the number to get more or less bubbles.
            for (var i=0; i<50; i++)
            {
                var bubble:DynamicMovie= new DynamicMovie();
 
                //Set the registration point for the bubble.
                bubble.setRegistration(X+position,Y);
 
                //Give the bubble the same color as the menu item and a random alpha but upper than 0.2.
                bubble.graphics.beginFill(Color,Math.random()+0.2);
 
                //draw a circle with a random Position and Radius.
                bubble.graphics.drawCircle(X + position + Math.random() * i,Y + 55 — Math.random() * i,Math.random()*5);
 
                //add the bubble at the third index to be under the menuButton.;
                addChildAt(bubble,3);
 
                //Tween the Bubble randomly according to the direction.
                new TweenLite(bubble,Math.random() + 1,{x2:X — 80 * direction + position — Math.random() * i,y2:Y — Math.random() * i,alpha:0,ease:Circ.easeOut});
            }
        }
 
    }
}

И вот окончательный результат:


Теперь вы можете создавать свое собственное меню и настраивать его, добавляя больше пунктов меню, меняя цвета, меняя текст …

Меню было закодировано в отдельном классе ActionScript, что позволяет легко использовать его в других проектах.

Я хочу поблагодарить вас за чтение; Надеюсь, вам понравилось!