Для ответной реакции на активность пользователя ваше приложение при помощи 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 включают:
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
|
Примечание.
Различные платформы устройств могут поддерживать многие комбинации типов ввода. Используйте эту таблицу в качестве общего руководства.
|
|
|