Статьи

Создание генератора QR-кода во Flash с использованием AS3

QR-коды сейчас везде: реклама в журналах, рекламные щиты, даже рекламные ролики. Скорее всего, у вас в кармане телефон, который может прочитать QR-код и декодировать URL-адрес или сообщение, содержащееся в нем. В этом руководстве вы узнаете, как создать SWF-файл, который может повернуть процесс вспять: создать QR-код из URL-адреса или сообщения. Читай дальше!


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


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

Код будет эффективно использовать класс кодировщика QR Code, созданный Жаном-Батистом Пином .


Откройте Flash и создайте документ шириной 480 пикселей и высотой 480 пикселей. Установите частоту кадров 24 к / с.


Будет отображен красочный красивый интерфейс, включающий несколько фигур, кнопок и многое другое.
Простые фигуры были созданы с использованием Flash Drawing Tools, поэтому нет необходимости включать их создание.


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


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

Вы можете скачать TweenNano с официального сайта .


Мы воспользуемся фантастической библиотекой QR Code Encoder, которую можно скачать здесь . Вы можете узнать больше об использовании внешних библиотек в своем коде с этим руководством .

Примечание редактора: для получения наилучших результатов используйте SWC-файл, а не классы в папке \ org \.


Добавьте имя класса в поле « Класс» в разделе « Публикация » на панели « Свойства», чтобы связать FLA с классом основного документа .


Создайте новый (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
6
import flash.display.Sprite;
import flash.events.MouseEvent;
import org.qrcode.QRCode;
import flash.display.Bitmap;
import com.greensock.TweenNano;
import com.greensock.easing.Expo;

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

1
2
3
4
5
6
7
private var textView:TextView;
private var smsView:SMSView = new SMSView();
private var emailView:EmailView = new EmailView();
private var linkView:LinkView = new LinkView();
private var lastView:Sprite;
private var currentTarget:String;
private var qrImg:Bitmap;

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

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

1
2
3
4
5
public final function Main():void
{
    addTextView();
    addListeners();
}

Первая функция, выполняемая конструктором. Он создаст экземпляр TextView и добавит его на сцену. Это будет представление по умолчанию, которое будет отображаться при запуске приложения. Он включает в себя вызов для удаления видимого в данный момент представления (если он есть), а также выполняет Tween в качестве детали интерфейса.

01
02
03
04
05
06
07
08
09
10
11
12
13
private final function addTextView():void
{
    removeLastView();
     
    textView = new TextView();
    textView.x = stage.stageWidth * 0.5;
    textView.y = 110;
    addChild(textView);
     
    TweenNano.from(textView, 0.5, {y: textView.y — 10, alpha:0, ease:Expo});
     
    lastView = textView;
}

Этот код обрабатывает положение SMSView и анимацию. Он вызывается при нажатии вкладки кнопки SMS.

01
02
03
04
05
06
07
08
09
10
11
12
13
private final function addSMSView():void
{
    removeLastView();
     
    smsView = new SMSView();
    smsView.x = stage.stageWidth * 0.5;
    smsView.y = 150;
    addChild(smsView);
     
    TweenNano.from(smsView, 0.5, {y: smsView.y — 10, alpha:0, ease:Expo});
     
    lastView = smsView;
}

Код EmailView. Это разместит и оживит этот взгляд на сцене.

01
02
03
04
05
06
07
08
09
10
11
12
13
private final function addEmailView():void
{
    removeLastView();
     
    emailView = new EmailView();
    emailView.x = stage.stageWidth * 0.5;
    emailView.y = 155;
    addChild(emailView);
     
    TweenNano.from(emailView, 0.5, {y: emailView.y — 10, alpha:0, ease:Expo});
     
    lastView = emailView;
}

Это последняя вкладка, она удаляет последний видимый вид и добавляет LinkView на сцену.

01
02
03
04
05
06
07
08
09
10
11
12
13
private final function addLinkView():void
{
    removeLastView();
     
    linkView = new LinkView();
    linkView.x = stage.stageWidth * 0.5;
    linkView.y = 110;
    addChild(linkView);
     
    TweenNano.from(linkView, 0.5, {y: linkView.y — 10, alpha:0, ease:Expo});
     
    lastView = linkView;
}

Эта функция удаляет видимый в данный момент вид со сцены и освобождает его для сбора мусора .

1
2
3
4
5
6
7
8
private final function removeLastView():void
{
    if(lastView != null)
    {
        removeChild(lastView);
        lastView = null;
    }
}

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

1
2
3
4
5
6
7
8
private final function addListeners():void
{
    abcBtn.addEventListener(MouseEvent.MOUSE_UP, indicatorHandler);
    smsBtn.addEventListener(MouseEvent.MOUSE_UP, indicatorHandler);
    emailBtn.addEventListener(MouseEvent.MOUSE_UP, indicatorHandler);
    linkBtn.addEventListener(MouseEvent.MOUSE_UP, indicatorHandler);
    refreshBtn.addEventListener(MouseEvent.MOUSE_UP, refreshCode);
}

Индикатор MovieClip — это маленькая стрелка, которая показывает активную вкладку. Эта функция помещает его в правильное положение и вызывает функцию табуляции.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
private final function indicatorHandler(e:MouseEvent):void
{
    indicator.x = e.target.x;
     
    switch(e.target.name)
    {
        case ‘abcBtn’:
            addTextView();
            break;
        case ‘smsBtn’:
            addSMSView();
            break;
        case ’emailBtn’:
            addEmailView();
            break;
        case ‘linkBtn’:
            addLinkView();
            break;
        default:
            trace(‘Button Names Error’);
    }
}

Эта функция запускается при нажатии кнопки «Обновить», она определяет текущую строку для преобразования и метод QRObject encode() для создания растрового изображения, которое затем добавляется на сцену.

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
37
38
39
40
41
42
private final function refreshCode(e:MouseEvent):void
{
    switch(lastView)
    {
        case textView:
            currentTarget = textView.textTF.text;
            break;
        case smsView:
            currentTarget = ‘SMSTO:’ + smsView.phoneTF.text + ‘:’ + smsView.contentTF.text;
            break;
        case emailView:
            currentTarget = ‘SMTP:’ + emailView.toTF.text + ‘:’ + emailView.subjectTF.text + ‘:’ + emailView.bodyTF.text;
            break;
        case linkView:
            currentTarget = linkView.linkTF.text;
            if (currentTarget.indexOf(‘://’) == -1)
            {
                currentTarget = ‘http://’ + currentTarget;
            }
            break;
        default:
            trace(‘Target Error’);
    }
     
    if(qrImg != null)
    {
        removeChild(qrImg);
        qrImg = null;
    }
     
    var qrObj:QRCode = new QRCode();
    qrObj.encode(currentTarget);
     
    qrImg = new Bitmap(qrObj.bitmapData);
     
    qrImg.x = stage.stageWidth * 0.5 — (qrImg.width * 0.5);
    qrImg.y = 300 — (qrImg.height * 0.5);
     
    addChild(qrImg);
     
    TweenNano.from(qrImg, 1, {alpha:0, ease:Expo});
}

Используйте это приложение для создания ваших собственных QR-кодов и не забудьте изучить исходные файлы.

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