Ihre Anwendung kann den Benutzer einbeziehen, indem mit ActionScript 3.0 auf Benutzeraktionen reagiert wird. Beachten Sie, dass in diesem Abschnitt vorausgesetzt wird, dass Sie mit dem Ereignismodell von ActionScript 3.0 vertraut sind. Weitere Informationen finden Sie unter
Verarbeiten von Ereignissen
.
Erfassen von Benutzereingaben
Die Benutzerinteraktion per Tastatur, Maus, Kamera oder einer Kombination dieser Geräte ist die Grundlage von Interaktivität. In ActionScript 3.0 wird das Erkennen von und Reagieren auf Benutzerinteraktionen in erster Linie durch Warten auf Ereignisse realisiert.
Die InteractiveObject-Klasse ist eine Unterklasse der DisplayObject-Klasse und stellt die allgemeine Ereignisstruktur und Funktionen bereit, die zum Verarbeiten von Benutzerinteraktionen erforderlich sind. Es ist nicht erforderlich, dass Sie direkt eine Instanz der InteractiveObject-Klasse erstellen. Stattdessen erben Anzeigeobjekte wie SimpleButton, Sprite, TextField und verschiedene Flash-Authoring-Tool- und Flex-Komponenten das entsprechende Benutzerinteraktionsmodell von dieser Klasse und weisen deshalb eine gemeinsame Struktur auf. Das bedeutet, dass die erlernten Techniken und der für von der InteractiveObject-Klasse abgeleitete Objekte programmierte Code zum Verarbeiten von Benutzerinteraktionen auch bei allen anderen Objekten anwendbar sind.
Wichtige Konzepte und Begriffe
Es ist wichtig, dass Sie sich mit den folgenden Kernbegriffen zur Benutzerinteraktion vertraut machen, bevor Sie fortfahren:
-
Zeichencode
-
Ein numerischer Code, der ein Zeichen aus dem aktuellen Zeichensatz darstellt (das einer auf der Tastatur gedrückten Taste zugeordnet ist). „D“ und „d“ haben beispielsweise unterschiedliche Zeichencodes, obwohl sie auf einer deutschen Tastatur durch Drücken derselben Taste erzeugt werden.
-
Kontextmenü
-
Das Menü, das angezeigt wird, wenn ein Benutzer mit der rechten Maustaste klickt oder eine bestimmte Tastatur-Maus-Kombination verwendet. Kontextmenübefehle gelten üblicherweise direkt für das Element, auf das geklickt wurde. Beispielsweise kann ein Kontextmenü für ein Bild den Befehl zum Anzeigen des Bilds in einem separaten Fenster sowie einen Befehl zum Herunterladen des Bilds enthalten.
-
Fokus
-
Eine visuelle Kennzeichnung, dass ein ausgewähltes Element aktiv und Ziel von Tastatur- oder Mausinteraktionen ist.
-
Tastencode
-
Ein numerischer Code, der einer Taste auf der Tastatur entspricht.
Fokusverwaltung
Ein interaktives Objekt kann den Fokus entweder durch Programmcode oder durch eine Benutzeraktion erhalten. Wenn die
tabEnabled
-Eigenschaft auf
true
gesetzt wird, können Benutzer zudem durch Drücken der TAB-Taste den Fokus zwischen Objekten weitergeben. Beachten Sie, dass der Wert für
tabEnabled
standardmäßig
false
ist, außer in den folgenden Fällen:
-
Bei einem SimpleButton-Objekt lautet der Wert
true
.
-
Bei Eingabetextfeldern ist dieser Wert
true
.
-
Bei Sprite- oder MovieClip-Objekten, deren
buttonMode
-Eigenschaft auf
true
gesetzt ist, ist dieser Wert
true
.
In jedem dieser Fälle können Sie einen Listener für
FocusEvent.FOCUS_IN
oder
FocusEvent.FOCUS_OUT
hinzufügen, um zusätzliches Verhalten bei Fokusänderungen bereitzustellen. Dies ist besonders nützlich bei Textfeldern und Formularen, kann jedoch auch für Sprites, Movieclips oder andere Objekte eingesetzt werden, die von der InteractiveObject-Klasse erben. Im folgenden Beispiel ist dargestellt, wie Sie das zyklische Wechseln des Fokus über die TAB-Taste aktivieren und auf die daraufhin ausgelösten Fokusereignisse reagieren können. Im Beispiel ändert jedes der Rechtecke die Farbe, wenn es den Fokus erhält.
Hinweis:
In Flash Professional werden Tastaturbefehle für die Fokusverwaltung verwendet. SWF-Dateien sollten deshalb nicht in Flash, sondern in einem Browser oder in AIR getestet werden, um die Fokusverwaltung korrekt zu simulieren.
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);
}
Erkennen von Eingabetypen
Ab Flash Player 10.1 und Adobe AIR 2 besteht die Möglichkeit, die Laufzeitumgebung hinsichtlich der Unterstützung bestimmter Eingabetypen zu testen. Mit ActionScript können Sie testen, ob das Gerät, auf dem die Laufzeit derzeit implementiert ist, folgende Kriterien erfüllt:
-
Unterstützung für die Eingabe über einen Stift oder Finger (oder keine Berührungseingabe)
-
Virtuelle oder physische Tastatur für den Benutzer (oder keine Tastatur)
-
Anzeige eines Cursors (falls dies nicht der Fall ist, können Funktionsmerkmale, bei denen mit der Maus auf ein Objekt gezeigt werden muss, nicht verwendet werden)
Zu den ActionScript-APIs für die Eingabeerkennung gehören:
Über die APIs für die Eingabeerkennung können Sie die Fähigkeiten des Endgeräts nutzen oder Alternativen bereitstellen, wenn keine solchen Fähigkeiten vorhanden sind. Diese APIs sind besonders bei der Entwicklung von Anwendungen für mobile und berührungsempfindliche Geräte hilfreich. Wenn die Benutzeroberfläche für ein Mobilgerät beispielsweise kleine Schaltflächen für einen Stift aufweist, können Sie eine alternative Benutzeroberfläche mit größeren Schaltflächen bereitstellen, die für die Eingabe per Finger geeignet ist. Der folgende Code ist für eine Anwendung mit einer Funktion namens „createStylusUI()“ vorgesehen. Diese Funktion weist Benutzeroberflächenelemente für eine stiftgesteuerte Interaktion zu. Eine weitere Funktion namens „createTouchUI()“ weist andere Benutzeroberflächenelemente zu, die für die Interaktion per Finger vorgesehen sind:
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();
}
Bei der Entwicklung von Anwendungen mit unterschiedlichen Eingabemechanismen sollten Sie die folgende Kompatibilitätsübersicht zurate ziehen:
Umgebung
|
supportsCursor
|
touchscreenType == FINGER
|
touchscreenType == STYLUS
|
touchscreenType == NONE
|
Herkömmlicher Desktop
|
true
|
false
|
false
|
true
|
Kapazitive Touchscreen-Geräte (Tabletts, PDAs und Telefone, die leichte Berührungen der Anwender erkennen, wie das Apple iPhone oder Palm Pre)
|
false
|
true
|
false
|
false
|
Resistive Touchscreen-Geräte (Tabletts, PDAs und Telefone, die präzisen Kontakt mit hohem Druck erkennen, wie das HTC Fuze)
|
false
|
false
|
true
|
false
|
Geräte ohne Touchscreen (Funktionstelefone und Geräte, auf denen Anwendungen ausgeführt werden, deren Bildschirme aber keinen Kontakt erkennen können)
|
false
|
false
|
false
|
true
|
Hinweis:
Verschiedene Geräteplattformen können zahlreiche Kombinationen aus Eingabetypen unterstützen. Dieses Diagramm soll als allgemeine Übersicht dienen.
|
|
|