Обработка событий нажатия

Flash Player 10.1 и более поздних версий, Adobe AIR 2 и более поздних версий

В среде ActionScript основные события прикосновения обрабатываются так же, как и другие события, например события мыши. Можно прослушать набор событий прикосновения, заданных константами типов событий в классе TouchEvent .
Примечание. При вводе с несколькими точками прикосновения (например, касание устройства несколькими пальцами) первая точка контакта отправляет событие мыши и событие касания.
Обработка основного события прикосновения:
  1. Задайте в приложении обработку событий прикосновения, установив для свойства flash.ui.Multitouch.inputMode значение MultitouchInputMode.TOUCH_POINT .

  2. Назначьте прослушиватель событий экземпляру класса, который наследует свойства класса InteractiveObject, например Sprite или TextField.

  3. Укажите тип обрабатываемого события прикосновения.

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

Например, следующий код позволяет отобразить сообщение, когда пользователь прикасается к квадрату, нарисованному в объекте mySprite, на сенсорном экране:

Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; 
 
var mySprite:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
 
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler); 
 
function taphandler(evt:TouchEvent): void { 
    myTextField.text = "I've been tapped"; 
    myTextField.y = 50; 
    addChild(myTextField); 
}

Свойства событий нажатия

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

Например, следующий код создает объект TouchEvent evt , а затем отображает свойство stageX объекта события (координату X точки рабочей области, в которой произошло прикосновение) в текстовом поле:

Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; 
 
var mySprite:Sprite = new Sprite(); 
var myTextField:TextField = new TextField(); 
 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
 
mySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler); 
 
function taphandler(evt:TouchEvent): void { 
myTextField.text = evt.stageX.toString; 
myTextField.y = 50; 
addChild(myTextField); 
}
См. описание класса TouchEvent для получения свойств, доступных в объекте события.
Примечание. Не все свойства TouchEvent поддерживаются в средах выполнения. Например, не все устройства с сенсорным экраном поддерживают измерение силы нажатия на сенсорный экран. Поэтому свойство TouchEvent.pressure не поддерживается на этих устройствах. Попробуйте проверить наличие поддержки определенного свойства для обеспечения правильной работы приложения и см. раздел « Устранение неполадок » для получения дополнительных сведений.

Фазы события прикосновения

Отслеживайте различные этапы событий прикосновения в объекте InteractiveObject и за его пределами, как и в случае с событиями мыши. Кроме того, отслеживайте начальную, промежуточную и конечную фазу события прикосновения. Класс TouchEvent предоставляет значения для обработки событий touchBegin , touchMove и touchEnd .

Например, события touchBegin , touchMove и touchEnd можно использовать для предоставления пользователю визуального отклика при нажатии и перемещении экранного объекта:

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 
var mySprite:Sprite = new Sprite(); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
var myTextField:TextField = new TextField(); 
myTextField.width = 200; 
myTextField.height = 20; 
addChild(myTextField); 
 
mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); 
stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
function onTouchBegin(event:TouchEvent) { 
    myTextField.text = "touch begin" + event.touchPointID; 
} 
function onTouchMove(event:TouchEvent) { 
    myTextField.text = "touch move" + event.touchPointID; 
} 
function onTouchEnd(event:TouchEvent) { 
    myTextField.text = "touch end" + event.touchPointID; 
}
Примечание. Начальный прослушиватель событий прикосновения подключается к объекту mySprite, но прослушиватели для перемещения и завершения прикосновения не подключаются. Если палец или инструмент указания перемещается перед экранным объектом, в рабочей области продолжается прослушивание события прикосновения.

Идентификатор точки прикосновения

Свойство TouchEvent.touchPointID является обязательным компонентом при написании приложений. Оно обеспечивает реакцию на сенсорный ввод. Среда выполнения Flash назначает каждой точке прикосновения уникальное значение touchPointID . Когда приложение реагирует на фазы или перемещение при сенсорном вводе, проверьте значение touchPointID перед обработкой события. В методах перетаскивания при сенсорном вводе в классе Sprite свойство touchPointID используется в качестве параметра, поэтому обрабатывается подходящий экземпляр ввода. Свойство touchPointID обеспечивает реакцию обработчика событий на правильную точку ввода. В противном случае обработчик события реагирует на любые экземпляры типов событий прикосновения (например, все события touchMove ) в устройстве, создавая непредвиденное поведение. Свойство играет особенно важную роль, когда пользователь перетаскивает объекты.

Используйте свойство touchPointID для управления всей последовательностью прикосновений. Последовательность прикосновений включает одно событие touchBegin , ни одного или несколько событий touchMove и одно событие touchEnd , для каждого из которых задано одинаковое значение touchPointID .

В следующем примере вводится переменная touchMoveID для проверки правильного значения touchPointID перед ответом на событие перемещения точки касания. В противном случае другой ввод с помощью касания также запускает обработчика события. Обратите внимание, что прослушиватели фаз перемещения и завершения закреплены за рабочей областью, а не экранным объектом. Рабочая область прослушивает фазы перемещения и завершения, когда прикосновение пользователя перемещается за границы экранного объекта.
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT; 
var mySprite:Sprite = new Sprite(); 
mySprite.graphics.beginFill(0x336699); 
mySprite.graphics.drawRect(0,0,40,40); 
addChild(mySprite); 
var myTextField:TextField = new TextField(); 
addChild(myTextField); 
myTextField.width = 200; 
myTextField.height = 20; 
var touchMoveID:int = 0; 
 
mySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin); 
function onTouchBegin(event:TouchEvent) { 
    if(touchMoveID != 0) { 
        myTextField.text = "already moving. ignoring new touch";     
        return; 
    } 
    touchMoveID = event.touchPointID; 
 
    myTextField.text = "touch begin" + event.touchPointID; 
    stage.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
    stage.addEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
} 
function onTouchMove(event:TouchEvent) { 
    if(event.touchPointID != touchMoveID) { 
        myTextField.text = "ignoring unrelated touch"; 
        return; 
    } 
    mySprite.x = event.stageX; 
    mySprite.y = event.stageY; 
    myTextField.text = "touch move" + event.touchPointID; 
} 
function onTouchEnd(event:TouchEvent) { 
    if(event.touchPointID != touchMoveID) { 
        myTextField.text = "ignoring unrelated touch end"; 
        return; 
    } 
    touchMoveID = 0; 
    stage.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove); 
    stage.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd); 
    myTextField.text = "touch end" + event.touchPointID; 
}