Статьи

Использование собственных жестов мультитач в ActionScript 3.0

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


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

Примечание. Этот пример будет работать только на устройствах Multitouch (планшеты, смартфоны, компьютеры с сенсорным экраном и сенсорные панели Multitouch в среде AIR).

Примечание для пользователей Android: Multitouch не будет работать в SWF, встроенном в HTML-страницу в браузере Android, но загрузка исходного кода содержит APK, который вы можете использовать для его проверки. (Обратите внимание, что APK предназначен только для быстрой демонстрации самих жестов и отображается не совсем правильно.)

Вы можете ущипнуть, чтобы увеличить, вращать, чтобы повернуть, и проведите пальцем, чтобы изменить изображение. Посмотрите демонстрацию видео, если вы не можете проверить предварительный просмотр на своем устройстве:


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


Запустите Flash и создайте новый документ. Установите размер сцены 600x300px и частоту кадров 24 кадров в секунду.

Flash AS3 мультитач жесты


Flash AS3 мультитач жесты

Интерфейс будет очень простым, просто изображение на сцене, которое затем будет изменено жестами.


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

Это изображения из демонстрации, полученные от Flickr , все с лицензией Creative Commons .

Flash AS3 мультитач жесты

Трава 01 по 100кр

Flash AS3 мультитач жесты

глубокое влияние на цвет планеты с помощью spettacolopuro

Flash AS3 мультитач жесты

Йосемити: цвета осени от тибриса

Flash AS3 мультитач жесты

Цветок Антонио Манчадо


Преобразуйте одно из изображений в видеоклип и добавьте остальные изображения в этот клип в разных кадрах. Назовите клип SlideItem и отметьте поле « Экспорт для ActionScript» .

Flash AS3 мультитач жесты


Flash AS3 мультитач жесты

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

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


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

Flash AS3 мультитач жесты


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

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
7
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
import flash.events.TransformGestureEvent;
import com.greensock.TweenNano;
import com.greensock.easing.Strong;

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

1
2
private var slideItem:SlideItem;
private var tempContainer:Sprite;

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

Он выполняет необходимые действия для запуска приложения.

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

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

1
Multitouch.inputMode = MultitouchInputMode.GESTURE;

Узнайте больше об этом на help.adobe.com .


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

01
02
03
04
05
06
07
08
09
10
slideItem = new SlideItem();
/* Prevents the image from changing */
slideItem.stop();
/* Center the image */
slideItem.x = stage.stageWidth * 0.5;
slideItem.y = stage.stageHeight * 0.5;
         
addChild(slideItem);
     
listeners(‘add’, slideItem);

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
private final function listeners(action:String, target:Sprite):void
{
    if(action == ‘add’)
    {
        target.addEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);
        target.addEventListener(TransformGestureEvent.GESTURE_ROTATE, onRotate);
        target.addEventListener(TransformGestureEvent.GESTURE_PAN, onPan);
        target.addEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe);
    }
    else
    {
        target.removeEventListener(TransformGestureEvent.GESTURE_ZOOM, onZoom);
        target.removeEventListener(TransformGestureEvent.GESTURE_ROTATE, onRotate);
        target.removeEventListener(TransformGestureEvent.GESTURE_PAN, onPan);
        target.removeEventListener(TransformGestureEvent.GESTURE_SWIPE, onSwipe);
    }
}

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


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

1
2
3
4
5
6
private final function onZoom(e:TransformGestureEvent):void
{
    /* Use the event data to scale the target image */
    e.target.scaleX *= e.scaleX;
    e.target.scaleY *= e.scaleY;
}

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

1
2
3
4
5
private final function onRotate(e:TransformGestureEvent):void
{
    /* Use the event data to rotate the target image */
    e.target.rotation += e.rotation;
}

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

1
2
3
4
5
private final function onPan(e:TransformGestureEvent):void
{
    e.target.x += e.offsetX;
    e.target.y += e.offsetY;
}

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

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

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
private final function onSwipe(e:TransformGestureEvent):void
{
    /* Check if image is on stage */
     
    if(slideItem != null)
    {
        tempContainer = new Sprite();
        tempContainer.addChild(slideItem);
        addChild(tempContainer);
    }
     
    /* Change Images */
     
    if(e.offsetX == 1)
    {
        //right
        slideItem = new SlideItem();
         
        slideItem.gotoAndStop(1);
        slideItem.x = -slideItem.width;
        slideItem.y = stage.stageHeight * 0.5;
         
        listeners(‘add’, slideItem);
        addChild(slideItem);
         
        TweenNano.to(tempContainer, 0.5, {x:stage.stageWidth, onComplete: removeLast});
        TweenNano.to(slideItem, 0.5, {x:stage.stageWidth * 0.5});
    }
    if(e.offsetX == -1)
    {
        //left
        slideItem = new SlideItem();
         
        slideItem.gotoAndStop(2);
        slideItem.x = stage.stageWidth + slideItem.width;
        slideItem.y = stage.stageHeight * 0.5;
         
        listeners(‘add’, slideItem);
        addChild(slideItem);
         
        TweenNano.to(tempContainer, 0.5, {x:-slideItem.width, onComplete: removeLast});
        TweenNano.to(slideItem, 0.5, {x:stage.stageWidth * 0.5});
    }
    if(e.offsetY == -1)
    {
        //up
        slideItem = new SlideItem();
         
        slideItem.gotoAndStop(3);
        slideItem.x = stage.stageWidth * 0.5;
        slideItem.y = stage.stageHeight + slideItem.height;
         
        listeners(‘add’, slideItem);
        addChild(slideItem);
         
        TweenNano.to(tempContainer, 0.5, {y:-slideItem.height, onComplete: removeLast});
        TweenNano.to(slideItem, 0.5, {y:stage.stageHeight * 0.5});
    }
    if(e.offsetY == 1)
    {
        //down
        slideItem = new SlideItem();
         
        slideItem.gotoAndStop(4);
        slideItem.x = stage.stageWidth * 0.5;
        slideItem.y = -slideItem.height;
         
        listeners(‘add’, slideItem);
        addChild(slideItem);
         
        TweenNano.to(tempContainer, 0.5, {y:slideItem.height, onComplete: removeLast});
        TweenNano.to(slideItem, 0.5, {y:stage.stageHeight * 0.5});
    }
}

Когда анимация заканчивается, предмет за сценой уничтожается для экономии памяти.

1
2
3
4
5
6
private final function removeLast():void
{
    listeners(‘remove’, tempContainer.getChildAt(0) as Sprite);
    removeChild(tempContainer);
    tempContainer = null;
}

Flash AS3 мультитач жесты

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


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

Спасибо за чтение этого урока, надеюсь, вы нашли его полезным!