IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Discussion :

[FLASH 8] Probleme keyDown


Sujet :

Flash

  1. #1
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut [FLASH 8] Probleme keyDown
    Bonjour, je débute en flash et j essaie de faire tourner un cercle à la pression d une touche clavier... le probleme est que la fonction est executée x fois...voici le code placé sur _root

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    var acceleration:Number;
    acceleration=1;
    sens=1;
     
    clavierListener= new Object(); 
    Key.addListener(clavierListener);
     
    clavierListener.onKeyDown = function() {
    	switch(Key.getCode()){
    		case 37://LEFT
    		trace("LEFT");
    		circle_mc._rotation+=(1);
    		acceleration+=1;
    		break;
     
    		case 39:
    		trace("RIGHT");
    		circle_mc._rotation-=(1);
    		acceleration+=1;
    		break;
    	}
    	trace("ROTATION: " + circle_mc._rotation);
    }
    la question n est pas de savoir comment faire pour le faire une fois mais plutot pourquoi cela se passe ainsi...merci

  2. #2
    Membre émérite Avatar de dom_dev
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 073
    Points : 2 338
    Points
    2 338
    Par défaut
    bonjour,
    j'ai un peu du mal à saisir la question et peut être que je ne suis pas le seul.
    Ton code à l'air de très bien fonctionner tu appuis une fois ça tourne une fois et si tu laisses le doigt appuyé ça tourne en continu comme la frappe d'un caractère dans un traitement de texte...
    peux tu préciser ??
    Si la ou les réponses obtenues vous ont donné satisfaction n'oublier pas ->
    Et ne rajoutez pas de nouvelles questions éternellement dans le même post surtout si vous en n'êtes pas l'auteur
    MERCI

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    oui effectivement...j avais pas pris le probleme ainsi
    par contre, je pense que le code du comportement du circle devrait etre dans l objet lui même et non pas dans la timeline de root...mais cela dépend de la manière de coder, laquelle est préconisée?

    dans ce cas là vu que le coportement est générique pour cet objet, je le mettrais plus dans l objet lui meme... ai je faux?

  4. #4
    Membre averti Avatar de aorgerit
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 257
    Points : 301
    Points
    301
    Par défaut
    Bonjour,

    touche répétitive du clavier, propre à l'OS, cela déclenche une boucle.

    utilse alors deux écouteurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    t37=false;
    clavierListener= new Object(); 
    clavierListener.onKeyDown = function() {
    if(t37==false
    t37=true
    ..
     
    }
    clavierListener.onKeyUp = function() {
    if(t37==true) {
    t37=false
    ..
     
    }
    Key.addListener(clavierListener);
    bien à toi.

  5. #5
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    merci merci
    mais justement ce coup du listener j ai du mal a comprendre car ce code je peux tout à fait le faire avec un onKeypress sur root par exemple, donc je voudrais savoir l interet!
    Ca me derange pas d utiliser une methode du moment que je comprend pourquoi je dois l utiliser.
    En tout cas merci de votre aide, j apprend beaucoup (et je me marre bien aussi)

  6. #6
    Membre émérite Avatar de dom_dev
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 073
    Points : 2 338
    Points
    2 338
    Par défaut
    Pour l'aspect qualité programmation (orientée objet) je ne suis pas très bien placé pour te répondre. Pour moi un clip est un objet qui possède une méthode "rotation" donc ça ne me choque pas du tout que le code qui utilise cette méthode soit à "l'extérieur" de l'objet.
    Si par contre ton clip est constitué d'un ensemble d'éléments un peu compliqué et que rotation déclenche plein d'actions, à ce moment là il faudrait définir un méthode rotation spécifique. En langage objet je crois qu'on appelle ça une "redéfinition".
    Si la ou les réponses obtenues vous ont donné satisfaction n'oublier pas ->
    Et ne rajoutez pas de nouvelles questions éternellement dans le même post surtout si vous en n'êtes pas l'auteur
    MERCI

  7. #7
    Membre averti Avatar de aorgerit
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 257
    Points : 301
    Points
    301
    Par défaut
    bonjour,

    le listener est appliqué à la touche via l'objet Key. or en ce cas si tu laisse ta touche appuyée, c'est ton os qui va prendre le relaye en raison de l'évnement de répétition de la touche.

    prends comme exemple ce champs de texte, appuie sur n'imprte quelle lettre, elle s'inscit une fois pui, si tu laisse appuyée la meme tocuhe, au bout d'un certain temps, elle va s'incrire plusieurs fois.

    Tu as le meme problème en flash, pour pallier ce soucis, utilise en ce cas une var :
    l'appui sur la touche modifie une var initialisée via le KeyDown, la répétiition de touche est bloquée cra justement cette var n'as PAS été changée par le
    keyUp de la même touche.
    Tu rends à présent chaque touche unique et indépendante d'elle même.


    Autant à l'inverse ton problème reste, si tu désires faire touner ton clip dès qu'il y a pression sur la touche :
    en ce cas il te faut utiliser sur l'évenement KeyDown une fonction pour appliquer la rotation incrémentée à ton objet qui doit tourner, en incrémentant dans une marge de limite une variable de rotation d'angle.
    donc sur OnkeyUp affecter une fonction qui décrémente ta vitesse de rotattion à ce meme objet et le fait tourner donc de moins en moins vite.

    Bien sûr la vitesse d'angle de rotation est toujours définie entre 0 et angle_maxi, tous en sachant que au moment de la pression ou relachement de la touche concernée, tu peux être entre les deux valeurs.

    Bien à toi

  8. #8
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Merci!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [FLASH MX2004] Problème accent dans un XML
    Par cinetryx dans le forum Flash
    Réponses: 10
    Dernier message: 30/05/2007, 00h26
  2. [FLASH MX] Probleme de scrollbar et texte dynamique
    Par Bisûnûrs dans le forum Flash
    Réponses: 6
    Dernier message: 28/06/2004, 21h12
  3. [Flash MX] Probleme de calques
    Par yonat94 dans le forum Flash
    Réponses: 2
    Dernier message: 28/04/2004, 12h18
  4. [flash MX] probleme avec setinterval et clearinterval
    Par yacinechaouche dans le forum Flash
    Réponses: 3
    Dernier message: 15/04/2004, 12h07
  5. [Flash 5] Probleme de movieclip
    Par WriteLN dans le forum Flash
    Réponses: 9
    Dernier message: 08/10/2003, 14h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo