Grundlagen der Benutzerinteraktion

Flash Player 9 und höher, Adobe AIR 1.0 und höher

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.