Interakcje aplikacji z użytkownikiem realizuje się przy wykorzystaniu kodu ActionScript 3.0, który reaguje na działania użytkownika. W treści sekcji przyjęto, że czytelnik jest zaznajomiony z modelem zdarzeń stosowanym w języku ActionScript 3.0. Więcej informacji zawiera sekcja
Obsługa zdarzeń
.
Interakcja z użytkownikiem
Interakcja z użytkownikiem, który korzysta z klawiatury, myszy, kamery lub kilku tych urządzeń łącznie, to punkt wyjścia do tworzenia aplikacji interaktywnych. W języku ActionScript 3.0 rozpoznawanie działań użytkownika i reagowanie na nie zwykle wymaga wykrywania określonych zdarzeń.
Klasa InteractiveObject, będąca podklasą klasy DisplayObject, udostępnia typową strukturę zdarzeń i funkcji niezbędnych do obsługi interakcji z użytkownikiem. Programista nie tworzy bezpośrednio instancji klasy InteractiveObject. Obiekty wyświetlane, takie jak SimpleButton, Sprite, TextField i różne składniki narzędzia do tworzenia treści Flash oraz składniki Flex, dziedziczą model interakcji z użytkownikiem z tej klasy, a przez to mają wspólną strukturę obsługi zdarzeń. Oznacza to, że poznana technika i napisany kod obsługi interakcji z jednym obiektem potomnym względem InteractiveObject będzie mieć zastosowanie do wszystkich takich obiektów.
Ważne pojęcia i terminy
Przed dalszą lekturą tego rozdziału należy zaznajomić się z poniższymi ważnymi terminami dotyczącymi interakcji z użytkownikiem:
-
Kod znaku
-
Kod liczbowy reprezentujący znak z bieżącego zestawu znaków (powiązany z klawiszem naciśniętym na klawiaturze). Przykładowo znaki „D” oraz „d” mają różne kody znaków, mimo że na amerykańskiej klawiaturze są generowane przez ten sam klawisz.
-
Menu kontekstowe
-
Menu wyświetlane, gdy użytkownik kliknie prawym przyciskiem myszy lub użyje określonej kombinacji przycisku myszy i klawisza na klawiaturze. Polecenia w menu kontekstowym zwykle dotyczą klikniętego elementu. Na przykład menu kontekstowe obrazu może zawierać polecenie wyświetlania obrazu w osobnym oknie oraz polecenie pobrania obrazu.
-
Aktywność
-
Stan, w którym dany element jest celem interakcji z klawiaturą lub myszą.
-
Kod klawisza
-
Kod liczbowy odpowiadający konkretnemu klawiszowi fizycznemu na klawiaturze.
Zarządzanie aktywnością
Obiekt interaktywny może stać się aktywny w wyniku operacji programowej lub działania użytkownika. Ponadto, jeśli właściwość
tabEnabled
jest ustawiona na
true
, użytkownik może przenosić aktywność z obiektu na obiekt, naciskając klawisz Tab. Należy zwrócić uwagę, że właściwość
tabEnabled
ma domyślnie wartość
false
by, z wyjątkiem następujących przypadków:
-
Dla obiektu SimpleButton ma wartość
true
.
-
Dla pola tekstu wejściowego ma wartość
true
.
-
Dla obiektu Sprite lub MovieClip z właściwością
buttonMode
ustawioną na
true
ma wartość
true
.
W każdej z tych sytuacji możliwe jest dodanie detektora zdarzeń
FocusEvent.FOCUS_IN
lub
FocusEvent.FOCUS_OUT
w celu rozbudowania funkcjonalności związanej ze zmianą aktywności. Jest to szczególnie użyteczne w przypadku pól tekstowych i formularzy, ale tego samego mechanizmu można używać w odniesieniu do ikony, klipów filmowych i dowolnych obiektów potomnych względem klasy InteractiveObject. Poniższy przykład ilustruje włączanie cyklicznej zmiany aktywności za pomocą klawisza Tab oraz reagowanie na wywołane w ten sposób zdarzenia zmiany aktywności. W tym przypadku każdy kwadrat zmienia swój kolor, gdy staje się aktywny.
Uwaga:
Flash Professional zarządza aktywnością przy użyciu skrótów klawiaturowych; dlatego, aby prawidłowo zasymulować zarządzanie aktywnością, należy testować pliki SWF w przeglądarce lub środowisku AIR, a nie w programie 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);
}
Wykrywanie typów interakcji wejściowych
W wydaniach Flash Player 10.1 i Adobe AIR 2 wprowadzono możliwość testowania środowiska wykonawczego pod kątem obsługi określonych typów interakcji wejściowych. Możliwe jest użycie języka ActionScript w celu określenia, czy urządzenie, na którym aktualnie wdrożone środowisko wykonawcze:
-
Obsługuje interakcje wejściowe pióra lub palca (lub nie obsługuje żadnych dotykowych interakcji wejściowych).
-
Dysponuje klawiaturą fizyczną czy wirtualną (lub żadną).
-
Wyświetla kursor (jeżeli nie, wówczas funkcje uzależnione od możliwości umieszczenia kursora nad obiektem nie działają).
Interfejsy API kodu ActionScript do wykrywania interakcji wejściowych zawierają:
Interfejsy API do wykrywania interakcji wejściowej umożliwiają wykorzystanie funkcji urządzenia użytkownika lub zapewniają alternatywne opcje, gdy któraś z tych funkcji jest niedostępna. Te interfejsy API są szczególnie pomocne podczas programowania aplikacji dla urządzeń przenośnych i tych wyposażonych w ekrany dotykowe. Na przykład w przypadku interfejsu dla urządzenia przenośnego o małych przyciskach dla pióra możemy udostępnić alternatywny interfejs z dużymi przyciskami dla użytkowników, którzy preferują przeprowadzać interakcje wejściowe, dotykając ekranu palcem. Poniższy kod jest przeznaczony dla aplikacji zawierającej funkcję o nazwie createStylusUI(), która powoduje przypisanie jednego zestawu elementów interfejsu użytkownika właściwych dla interakcji za pomocą pióra. Inna funkcja, o nazwie createTouchUI(), służy do przypisywania kolejnego zestawu elementów interfejsu użytkownika, które są odpowiednie dla interakcji za pomocą palca.
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();
}
Podczas programowania aplikacji dla środowisk różnych interakcji wejściowych należy wziąć pod uwagę dane z poniższej tabeli dotyczącej zgodności:
Środowisko
|
supportsCursor
|
touchscreenType == FINGER
|
touchscreenType == STYLUS
|
touchscreenType == NONE
|
Tradycyjny komputer stacjonarny
|
true
|
false
|
false
|
true
|
Urządzenia z pojemnościowymi ekranami dotykowymi (tablety, palmtopy, telefony wykrywające delikatny dotyk palców, takie jak Apple iPhone czy Palm Pre)
|
false
|
true
|
false
|
false
|
Urządzenia z rezystancyjnymi ekranami dotykowymi (tablety, palmtopy, telefony wykrywające nacisk o wysokiej sile, takie jak HTC Fuze)
|
false
|
false
|
true
|
false
|
Urządzenia bez ekranu dotykowego (funkcjonalne telefony i urządzenia, na których można uruchamiać aplikacje, ale które nie są wyposażone w ekrany wykrywające dotyk)
|
false
|
false
|
false
|
true
|
Uwaga:
Platformy różnych urządzeń mogą obsługiwać różne kombinacje typów interakcji wejściowych. W poniższej tabeli przedstawiono ogólne informacje pomocnicze.
|
|
|