Felsökning

Flash Player 10.1 och senare, Adobe AIR 2 och senare

Stödet för olika pekfunktioner i maskinvara och program ändras mycket snabbt. Den här referensen innehåller inte någon lista över varje enhet eller kombination av operativsystem och programvara som stöder multitouch. Men den ger en vägledning i hur du använder API:et för identifiering för att avgöra om programmet är implementerat på en enhet som har stöd för multitouch, och ger tips på hur du felsöker din ActionScript-kod.

Flash-körningar svarar på pekhändelser utifrån den information som enheten, operativsystemet eller programbehållaren (till exempel en webbläsare) skickar till körningen. Detta beroendeförhållandet till programmiljön komplicerar beskrivningen av multitouch-kompatibiliteten. Vissa enheter tolkar en gest eller en pekrörelse annorlunda än andra enheter. Ska ett objekt roteras genom att två fingrar vrids på samma gång? Ska det roteras genom att ett finger gör en cirkelrörelse på skärmen? Beroende på vilken maskinvaru- och programmiljö som används kan gesten för att rotera objekt se annorlunda ut. Enheten ger därför operativsystemet information om användarens indata och operativsystemet skickar detta vidare till körningen. Om körningen sker i en webbläsare, tolkar webbläsareprogrammet ibland gesten eller pekhändelsen och skickar den inte vidare till körningen. Det här beteendet liknar beteendet med tangentbordskommandon: om du försöker att använda en viss tangentkombination för Flash Player i en webbläsare kanske webbläsaren istället öppnar en meny.

Enskilda API:er och klasser ger information om de inte är kompatibla med ett visst operativsystem. Du kan utforska de enskilda API:erna här, med början från klassen Multitouch: http://help.adobe.com/sv_SE/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html.

Här är en beskrivning av några vanliga gester och pekrörelser:
Panorera
Flytta ett finger från vänster till höger eller från höger till vänster. På vissa enheter krävs två fingrar för att panorera.

Rotera
Trycka ned två fingrar och sedan flytta runt dem i en cirkel (som om fingrarna ritade en cirkel på ytan). Pivåpunkten är mittpunkten mellan de båda fingrarnas kontaktpunkter.

Svepa
Snabbt flytta tre fingrar från vänster till höger eller från höger till vänster, eller uppifrån och ned eller nerifrån och upp.

Zooma
Håll ned två fingrar och flytta dem sedan ifrån varandra om du vill zooma in och närmare varandra om du vill zooma ut.

Tryck-och-peka
Flytta eller tryck ned ett finger och peka sedan på ytan med ett annat.

Varje enhet har egen dokumentation om de gester som den enheten stöder och hur gesterna utförs på enheten. Oftast måste användaren ta bort alla fingrar från enheten mellan olika gester beroende på vilket operativsystem som används.

Om programmet inte svarar på pekhändelser eller gester testar du följande:
  1. Finns händelseavlyssnare för pek- eller gesthändelser bifogade till en objektklass som ärver från klassen InteractiveObject? Endast InteractiveObject-instanser kan lyssna efter pek- och gesthändelser

  2. Testar du programmet i Flash Professional CS5? Försök i så fall publicera och testa programmet eftersom Flash Professional kan störa interaktionen.

  3. Börja enkelt och se vad som fungerar först (följande kodexempel är från API:et för Multitouch.inputMode:

    Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT; 
    var mySprite:Sprite = new Sprite(); 
    var myTextField:TextField = new TextField() 
     
    mySprite.graphics.beginFill(0x336699); 
    mySprite.graphics.drawRect(0,0,40,40); 
    addChild(mySprite); 
     
    mySprite.addEventListener(TouchEvent.TOUCH_TAP, taplistener); 
     
    function taplistener(e:TouchEvent): void { 
        myTextField.text = "I've been tapped"; 
        myTextField.y = 50; 
        addChild(myTextField); 
    }

    Peka på rektangeln Om det här exemplet fungerar så vet du att din miljö stöder enkla pekningar. Sedan kan du försöka med en mer komplicerad hantering.

    Tester för geststöd är mer komplicerade. Varje enskild enhet eller operativsystem har antingen stöd för gestkombinationer eller inte.

    Här visas en enkel test för zoomgester:

    Multitouch.inputMode = MultitouchInputMode.GESTURE; 
     
    stage.addEventListener(TransformGestureEvent.GESTURE_ZOOM , onZoom); 
    var myTextField = new TextField(); 
    myTextField.y = 200; 
    myTextField.text = "Perform a zoom gesture"; 
    addChild(myTextField); 
     
    function onZoom(evt:TransformGestureEvent):void { 
        myTextField.text = "Zoom is supported"; 
    }

    Utför en zoomgest på enheten och kontrollera om fältet fylls i med meddelandet Zoom is supported. Händelseavlyssnaren läggs till på scenen så att du kan utföra gesten på alla delar i testprogrammet.

    Här visas en enkel test för panoreringsgester:

    Multitouch.inputMode = MultitouchInputMode.GESTURE; 
     
    stage.addEventListener(TransformGestureEvent.GESTURE_PAN , onPan); 
    var myTextField = new TextField(); 
    myTextField.y = 200; 
    myTextField.text = "Perform a pan gesture"; 
    addChild(myTextField); 
     
    function onPan(evt:TransformGestureEvent):void { 
        myTextField.text = "Pan is supported"; 
    }

    Utför en panoreringsgest på enheten och kontrollera om fältet fylls i med meddelandet Pan is supported. Händelseavlyssnaren läggs till på scenen så att du kan utföra gesten på alla delar i testprogrammet.

    Vissa operativsystem och enhetskombinationer har stöd för båda gesterna, vissa har stöd för endast en och andra ingen. Kontrollera programmets distributionsmiljö för att vara säker.

Kända fel

Nedan följer kända problem som rör beröringsindata:
  1. Mobile Internet Explorer på operativsystemet Windows Mobile zoomar automatiskt in SWF-filinnehåll:

    Det här zoombeteendet i Internet Explorer kan undvikas genom att du lägger till följande kod i HTML-sidan som hyser SWF-filen:

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. Windows 7 (och eventuellt andra operativsystem): Användaren måste lyfta på pekdonet (eller fingrarna) från skärmen mellan olika gester. Så här gör du till exempel för att rotera och zooma en bild:
    • Utför roteringsgesten.

    • Lyft bort fingrarna från skärmen.

    • Sätt tillbaka fingrarna på skärmen och utför zoomgesten.

  3. Windows 7 (och eventuellt andra operativsystem): Rotations- och zoomningsgesterna genererar inte alltid någon uppdateringsfas om användaren utför gesten mycket snabbt.

  4. Windows 7 Starter Edition stöder inte multitouch. Mer information finns i forumet för AIR Labs: http://forums.adobe.com/thread/579180?tstart=0

  5. I Mac OS 10.5.3 och senare är värdet för Multitouch.supportsGestureEvents alltid true, även om maskinvaran inte har stöd för gesthändelser.