Basis van gebruikersinteractie

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

Uw toepassing kan interactiviteit creëren door met ActionScript 3.0 op gebruikersactiviteit te reageren. Let op: deze sectie veronderstelt dat u het gebeurtenismodel van ActionScript 3.0 al kent. Zie Gebeurtenissen afhandelen voor meer informatie.

Gebruikersinvoer vastleggen

Gebruikersinteractie via toetsenbord, muis, camera of een combinatie van deze apparaten, ligt ten grondslag aan interactiviteit. Voor het identificeren van en het reageren op gebruikersinteractie in ActionScript 3.0 staat het luisteren naar gebeurtenissen voorop.

De klasse InteractiveObject, een subklasse van de klasse DisplayObject, biedt de algemene structuur van benodigde gebeurtenissen en functionaliteit voor verwerking van gebruikersinteractie. U kunt niet rechtstreeks een instantie van de klasse InteractiveObject maken. Weergaveobjecten zoals SimpleButton, Sprite, TextField en diverse componenten van het Flash-programma voor het schrijven van programmacode en van Flex nemen daarentegen het gebruikersinteractiemodel van deze klasse over en hebben dus dezelfde structuur. Dit betekent dat de technieken die u leert en de code die u schrijft voor verwerking van gebruikersinteractie in een object dat is afgeleid van InteractiveObject, ook op alle andere objecten van toepassing zijn.

Belangrijke concepten en termen

Het is van belang dat u bekend bent met de volgende belangrijke termen op het gebied van gebruikersinteractie voordat u verdergaat:

Tekencode
Een numerieke code die een teken uit de huidige tekenset vertegenwoordigt (gekoppeld aan het drukken op een toets van het toetsenbord). ‘D’ en ‘d’ hebben bijvoorbeeld verschillende tekencodes, ook al worden deze op een Nederlands toetsenbord met behulp van dezelfde toets gemaakt.

Contextmenu
Het menu dat wordt weergegeven wanneer de gebruiker met de rechtermuisknop klikt of een bepaalde combinatie maakt met toetsenbord en muis. Opdrachten uit een contextmenu worden doorgaans rechtstreeks toegepast op het item waarop is geklikt. Een contextmenu voor een afbeelding kan bijvoorbeeld een opdracht bevatten waarmee de afbeelding in een apart venster wordt weergegeven en een opdracht waarmee de afbeelding wordt gedownload.

Focus
De aanduiding dat een geselecteerd element actief is en het doel is van interactie via toetsenbord of muis.

Toetscode
Een numerieke code die overeenkomt met een fysieke toets op het toetsenbord.

Focus beheren

Een interactief object kan via programmacode of door een gebruikershandeling focus krijgen. Als de eigenschap tabEnabled op true wordt ingesteld, kan de gebruiker focus bovendien van een object naar het volgende object verplaatsen door op de Tab-toets te drukken. De waarde van tabEnabled is standaard false , behalve in de volgende gevallen:

  • De waarde van een object SimpleButton is true .

  • Voor een invoertekstveld is de waarde true .

  • Voor een object Sprite of MovieClip waarvoor buttonMode is ingesteld op true , is de waarde true .

In beide situaties kunt u een listener voor FocusEvent.FOCUS_IN of FocusEvent.FOCUS_OUT toevoegen om additionele gedragingen mogelijk te maken wanneer de focus wijzigt. Dit is met name nuttig voor tekstvelden en formulieren, maar kan ook worden gebruikt voor Sprites, filmclips of andere objecten die van de klasse InteractiveObject overerven. In het volgende voorbeeld wordt weergegeven hoe u doorlopende focus met de Tab-toets mogelijk maakt en hoe u op de hieruit resulterende focusgebeurtenis kunt reageren. In dit geval verandert de kleur van elk vierkant zodra het vierkant focus krijgt.

Opmerking: Flash Professional gebruikt sneltoetsen om focus te beheren; om focusbeheer correct te simuleren, moeten SWF-bestanden worden getest in een browser of AIR in plaats van in 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); 
}

Invoertypen vaststellen

Vanaf Flash Player 10.1 en Adobe AIR 2 kunt u de runtimeomgeving testen op ondersteuning voor specifieke invoertypen. Met ActionScript kunt u testen of het apparaat waarop het runtimeprogramma op dat moment wordt uitgevoerd:
  • Ondersteuning biedt voor invoer met de pen of vinger (of geen ondersteuning biedt voor aanraakinvoer)

  • Beschikt over een virtueel of fysiek toetsenbord voor de gebruiker (of juist geen enkel toetsenbord heeft).

  • Een cursor weergeeft (als dit niet het geval is, werken functies niet die afhankelijk zijn van een cursor die boven een object wordt geplaatst).

De ActionScript-API's waarmee het type invoer wordt vastgesteld zijn onder andere:

Met de API's voor het vaststellen van het invoertype kunt u de functies van een apparaat volledig benutten of alternatieven bieden als bepaalde functies ontbreken. Deze API's zijn vooral handig voor het ontwikkelen van mobiele toepassingen en toepassingen die werken met aanraaktechnologieën. Als u bijvoorbeeld een interface hebt voor een mobiel apparaat met kleine knoppen voor een pen, kunt u een alternatief interface met grotere knoppen aanbieden voor gebruikers die met hun vingers willen invoeren. De volgende code is voor een toepassing met de functie createStylusUI() die één bepaalde set met gebruikersinterface-elementen toewijst die geschikt zijn voor peninvoer. Een andere functie, createTouchUI() genaamd, wijst een andere set met gebruikersinterface-elementen toe die geschikt is voor interactie via de vingers:

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(); 
}
Bij het ontwikkelen van toepassingen voor verschillende invoeromgevingen moet u rekening houden met de volgende compatibiliteitsgrafiek:

Omgeving

supportsCursor

touchscreenType == FINGER

touchscreenType == STYLUS

touchscreenType == NONE

Traditionele bureaubladcomputer

true

false

false

true

Apparaten met capacitieve aanraakschermen (tablets, PDA's en telefoons die subtiele aanrakingen kunnen detecteren, zoals de Apple iPhone of Palm Pre)

false

true

false

false

Apparaten met resistieve aanraakschermen (tablets, PDA's en telefoons die precieze, harde aanrakingen detecteren, zoals de HTC Fuze)

false

false

true

false

Apparaten met schermen die niet op aanrakingen reageren (telefoons en apparaten met geavanceerde functies waarop toepassingen worden uitgevoerd, maar die niet werken met aanraakschermen)

false

false

false

true

Opmerking: Verschillende apparaatplatforms bieden ondersteuning voor allerlei combinaties van invoertypen. Gebruik deze grafiek als een algemene richtlijn.