Résolution des problèmes

Flash Player 10.1 et les versions ultérieures, Adobe AIR 2 et les versions ultérieures

La prise en charge matérielle et logicielle de la saisie tactile évolue rapidement. Le présent Guide de référence ne dresse pas la liste de tous les périphériques et combinaisons système d’exploitation/logiciels qui prennent en charge la saisie multipoint. Il contient toutefois des conseils relatifs à l’utilisation de l’API de découverte pour déterminer si le périphérique sur lequel est déployée l’application prend en charge la saisie multipoint, et propose des conseils de résolution des problèmes dans le code ActionScript.

Les moteurs d’exécution de Flash réagissent aux événements tactiles en fonction des informations transmises au moteur d’exécution par le périphérique, le système d’exploitation ou un logiciel conteneur (un navigateur, par exemple). Cette dépendance vis-à-vis de l’environnement logiciel complique la présentation de la compatibilité multipoint. L’interprétation d’un mouvement ou d’une action tactile varie parfois selon le périphérique. Une rotation consiste-t-elle en deux doigts qui pivotent simultanément ? Ou en un doigt qui trace un cercle à l’écran ? Selon l’environnement matériel et logiciel utilisé, le mouvement de rotation peut correspondre à l’un des deux cas de figure ou à une action totalement différente. Le périphérique indique la saisie utilisateur au système d’exploitation, qui transmet cette information au moteur d’exécution. Si le moteur d’exécution tourne dans un navigateur, ce dernier interprète parfois l’événement tactile ou de mouvement et ne transmet pas la saisie au moteur d’exécution. Ce comportement est similaire à celui des « touches de fonction » : vous essayez d’utiliser une combinaison de touches déterminée pour demander à Flash Player d’effectuer une action donnée dans le navigateur, au lieu de quoi ce dernier ouvre un menu.

Chaque API et classe indique si elle n’est pas compatible avec certains systèmes d’exploitation. Le cas échéant, passez en revue les entrées consacrées aux API, à commencer par la classe Multitouch : http://help.adobe.com/fr_FR/FlashPlatform/reference/actionscript/3/flash/ui/Multitouch.html .

Quelques mouvements et actions tactiles courants sont décrits ci-après :
Panoramique
Déplacez un doigt de gauche à droite ou de droite à gauche. Certains périphériques requièrent l’utilisation de deux doigts pour exécuter un panoramique.

Rotation
Touchez l’écran de deux doigts, puis déplacez-les en formant un cercle (comme s’ils traçaient simultanément un cercle imaginaire sur une surface). Le pivot correspond au point intermédiaire entre les deux points tactiles.

Glissement
Déplacez rapidement trois doigts de gauche à droite ou de droite à gauche, de haut en bas ou de bas en haut.

Zoom
Touchez l’écran de deux doigts, puis séparez-les pour effectuer un zoom avant ou rapprochez-les pour effectuer un zoom arrière.

Appui-appui bref
Déplacez ou appuyez un doigt, puis appuyez brièvement d’un doigt sur la surface.

La documentation de chaque périphérique passe en revue les mouvements pris en charge et leur mode d’exécution. En règle générale, selon le système d’exploitation, l’utilisateur ne doit pas toucher du doigt le périphérique entre chaque mouvement.

Si l’application ne réagit pas aux événements tactiles ou aux mouvements, vérifiez les éléments suivants :
  1. Des écouteurs d’événements tactiles ou de mouvement sont-ils associés à une classe d’objet qui hérite de la classe InteractiveObject ? Seules les occurrences d’InteractiveObject peuvent écouter les événements tactiles et de mouvement.

  2. Testez-vous l’application avec Flash Professional CS5 ? Si tel est le cas, essayez de publier et de tester l’application, car Flash Professional peut intercepter l’interaction.

  3. Commencez par des événements simples et identifiez les événements pris en charge (l’exemple de code suivant est extrait de l’entrée consacrée à l’API de 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); 
    }

    Appuyez sur le rectangle. Si cet exemple fonctionne, vous savez que l’environnement prend en charge un appui simple. Vous pouvez ensuite passer aux événements plus complexes.

    Tester la prise en charge du mouvement est plus complexe. Un périphérique ou un système d’exploitation donné prend en charge toute combinaison de saisie par mouvement ou ne prend pas en charge du tout ce type de saisie.

    Procédez comme suit pour tester simplement le mouvement de zoom :

    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"; 
    }

    Effectuez un mouvement de zoom sur le périphérique et vérifiez si le champ de texte contient le message Zoom is supported . L’écouteur d’événements est ajouté à la scène pour vous permettre d’effectuer le mouvement sur toute partie de l’application test.

    Procédez comme suit pour tester simplement le mouvement panoramique :

    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"; 
    }

    Effectuez un mouvement panoramique sur le périphérique et vérifiez si le champ de texte contient le message Pan is supported . L’écouteur d’événements est ajouté à la scène pour vous permettre d’effectuer le mouvement sur toute partie de l’application test.

    Certaines combinaisons de système d’exploitation et de périphérique prennent en charge les deux mouvements, d’autres un seul, d’autres aucun. En cas de doute, testez l’environnement de déploiement de l’application.

Problèmes connus

Les problèmes connus liés à la saisie tactile sont les suivants :
  1. Mobile Internet Explorer sur un périphérique Windows Mobile effectue un zoom automatique sur un contenu issu d’un fichier SWF :

    Pour résoudre ce problème de comportement de zoom dans Internet Explorer, ajoutez le code suivant à la page HTML qui héberge le fichier SWF :

    <head> 
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0"> 
    </head>
  2. Sous Windows 7 (et peut-être d’autres systèmes d’exploitation), l’utilisateur doit retirer le périphérique de pointage (ou les doigts) de l’écran entre les mouvements. Par exemple, pour exécuter une rotation et un zoom sur une image :
    • Exécutez le mouvement de rotation.

    • Retirez les doigts de l’écran.

    • Replacez les doigts sur l’écran et effectuez le mouvement de zoom.

  3. Sous Windows 7 (et probablement sous d’autres systèmes d’exploitation), les mouvements de rotation et de zoom ne génèrent pas systématiquement une phase « update » ; c’est notamment le cas lorsque l’utilisateur effectue le mouvement très rapidement.

  4. Windows 7 Starter Edition ne gère pas la saisie multipoint. Pour plus d’informations, voir les forums d’Adobe Labs : http://forums.adobe.com/thread/579180?tstart=0

  5. Sous Mac OS 10.5.3 et les versions ultérieures, la valeur Multitouch.supportsGestureEvents est toujours définie sur true , même si le matériel ne prend pas en charge les événements de mouvement.