Основы взаимодействия пользователя с системой

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

Для ответной реакции на активность пользователя ваше приложение при помощи ActionScript 3.0 может создавать интерактивность. Обратите внимание, что для понимания этого раздела вы должны быть знакомы с моделью событий ActionScript 3.0. Дополнительные сведения см. в разделе « Обработка событий ».

Захват действий пользователя

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

Класс InteractiveObject, подкласс класса DisplayObject, обеспечивает общую структуру событий и функциональность, необходимые для взаимодействия с пользователем. Экземпляр класса InteractiveObject не создается напрямую. Вместо этого такие экранные объекты, как SimpleButton, Sprite, TextField и различные компоненты инструмента разработки Flash и Flex, наследуют модели взаимодействия с пользователем от этого класса и поэтому имеют одинаковую структуру. Это означает, что изученные вами техники и код, который вы напишете для обработки взаимодействия с пользователем объектов, созданных на основе InteractiveObject, можно будет применять и ко всем остальным объектам.

Важные понятия и термины

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

Код символа
Числовой код, обозначающий символ в текущей раскладке (связанный с клавишей, нажатой на клавиатуре). Например, буквы «D» и «d» в латинской раскладке имеют разные коды, хотя они и набираются с помощью одной и той же клавиши.

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

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

Код клавиши
Числовой код, соответствующий физической клавише на клавиатуре.

Управление фокусом

Интерактивный объект может получать фокус программными средствами или вследствие действия пользователя. Кроме того, если свойство tabEnabled имеет значение true , пользователь может передавать фокус от одного объекта другому клавишей табуляции. Обратите внимание, что по умолчанию значение tabEnabled = false , кроме следующих случаев.

  • Для объекта SimpleButton используется значение true .

  • Для поля ввода текста используется значение true .

  • Для объекта Sprite или MovieClip с buttonMode = true используется значение true .

В каждом из этих случаев можно добавить прослушиватель для событий FocusEvent.FOCUS_IN или FocusEvent.FOCUS_OUT , чтобы добавить дополнительные виды поведения при смене фокуса. Это особенно полезно для полей ввода текста и форм, но также может пригодиться для спрайтов, фрагментов роликов и любых других объектов, наследуемых от класса InteractiveObject. В примере ниже показано, как включить зацикливание фокуса с помощью клавиши табуляции и как реагировать на последующие события фокуса. В этом случае каждый квадрат при получении фокуса меняет цвет.

Примечание. Среда разработки Flash Professional управляет фокусом с помощью клавиатуры, поэтому для правильной симуляции управления фокусом SWF-файлы необходимо тестировать в обозревателе или среде AIR, а не в средстве разработки Flash.
var rows:uint = 10; 
var cols:uint = 10; 
var rowSpacing:uint = 25; 
var colSpacing:uint = 25; 
var i:uint; 
var j:uint; 
for (i = 0; i < rows; i++) 
{ 
    for (j = 0; j < cols; j++) 
    { 
        createSquare(j * colSpacing, i * rowSpacing, (i * cols) + j); 
    } 
} 
 
function createSquare(startX:Number, startY:Number, tabNumber:uint):void 
{ 
    var square:Sprite = new Sprite(); 
    square.graphics.beginFill(0x000000); 
    square.graphics.drawRect(0, 0, colSpacing, rowSpacing); 
    square.graphics.endFill(); 
    square.x = startX; 
    square.y = startY; 
    square.tabEnabled = true; 
    square.tabIndex = tabNumber; 
    square.addEventListener(FocusEvent.FOCUS_IN, changeColor); 
    addChild(square); 
} 
function changeColor(event:FocusEvent):void 
{ 
    event.target.transform.colorTransform = getRandomColor(); 
} 
function getRandomColor():ColorTransform 
{ 
    // Generate random values for the red, green, and blue color channels. 
    var red:Number = (Math.random() * 512) - 255; 
    var green:Number = (Math.random() * 512) - 255; 
    var blue:Number = (Math.random() * 512) - 255; 
     
    // Create and return a ColorTransform object with the random colors. 
    return new ColorTransform(1, 1, 1, 1, red, green, blue, 0); 
}

Обнаружение типов ввода

В выпусках Flash Player 10.1 и Adobe AIR 2 представлена возможность тестирования среды выполнения на наличие поддержки определенных типов ввода. ActionScript можно использовать для тестирования устройства, в котором в настоящее время развернута среда выполнения, на наличие следующих видов поддержки:
  • Поддержка ввода с помощью пера или пальца (или полное отсутствие поддержки ввода с помощью прикосновения).

  • Наличие виртуальной или физической клавиатуры для пользователя (или полное отсутствие клавиатуры).

  • Отображение курсора (если не отображается, функции, которые зависят от наведения курсора на объект, не работают).

API-интерфейсы обнаружения ввода в среде ActionScript включают:
  • Свойство flash.system.Capabilities.touchScreenType : значение, предоставляемое во время выполнения и показывающее тип ввода, поддерживаемый в текущей среде.

  • Класс flash.system.TouchScreenType : класс констант значений перечисления для свойства Capabilities.touchScreenType.

  • Свойство flash.ui.Mouse.supportsCursor : значение, предоставляемое во время выполнения и показывающее доступность постоянного курсора.

  • Свойство flash.ui.Keyboard.physicalKeyboardType : значение, предоставляемое во время выполнения и показывающее доступность полной физической клавиатуры или только числовой клавиатуры либо полное отсутствие клавиатуры.

  • Класс flash.ui.KeyboardType : класс констант значений перечисления для свойства flash.ui.Keyboard.physicalKeyboardType.

  • Свойство flash.ui.Keyboard.hasVirtualKeyboard : значение, предоставляемое во время выполнения и показывающее доступность пользователю виртуальной клавиатуры (вместо физической клавиатуры или в добавление к ней).

API-интерфейсы обнаружения ввода позволяют эффективно использовать возможности пользовательского устройства или предоставлять альтернативные варианты, если эти возможности отсутствуют. Эти API-интерфейсы особенно полезны при разработке мобильных приложений или приложений с поддержкой сенсорного ввода. Например, при наличии интерфейса для мобильного устройства, в котором предусмотрено небольшое число кнопок для нажатия пером, можно предоставить альтернативный интерфейс с большим числом кнопок, чтобы пользователь мог осуществлять ввод прикосновением пальца. Следующий код предназначен для приложения, в котором используется функция createStylusUI(), назначающая один набор элементов пользовательского интерфейса соответствующему взаимодействию с помощью пера. Другая функция, createTouchUI(), назначает другой набор элементов пользовательского интерфейса соответствующему взаимодействию с помощью прикосновения пальцем:

if(Capabilities.touchscreenType == TouchscreenType.STYLUS ){ 
    //Construct the user interface using small buttons for a stylus 
    //and allow more screen space for other visual content 
    createStylusUI(); 
} else if(Capabilities.touchscreenType = TouchscreenType.FINGER){ 
    //Construct the user interface using larger buttons 
    //to capture a larger point of contact with the device 
    createTouchUI(); 
}
При разработке приложений для различных сред ввода учитывайте следующую таблицу совместимости:

Среда

supportsCursor

touchscreenType == FINGER

touchscreenType == STYLUS

touchscreenType == NONE

Традиционный персональный компьютер

true

false

false

true

Устройства с емкостным сенсорным экраном (планшеты, КПК и телефоны, обнаруживающие легкое прикосновение, такие как Apple iPhone или Palm Pre)

false

true

false

false

Устройства с резистивным сенсорным экраном (планшеты, КПК и телефоны, обнаруживающие точное сильное нажатие, такие как HTC Fuze)

false

false

true

false

Устройства без сенсорного экрана (популярные телефоны и устройства, в которых выполняются приложения, но отсутствует экран, обнаруживающий нажатие)

false

false

false

true

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