Keylistener et Key.isToggled

Résolu
manuken Messages postés 22 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 15 décembre 2006 - 2 oct. 2006 à 11:02
manuken Messages postés 22 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 15 décembre 2006 - 8 oct. 2006 à 14:45
Bonjour,
J'utilise keylistener pour assigner une action à chaque touche appuyée au clavier par l'utilisateur.
En gros, la lettre "t" apparait, si appui sur la bonne touche va à l'image 2 sinon va à l'image 3

Pour les lettres minuscules tout fonctionne bien mais comment faire la même chose avec les chiffres et les lettres accentuées ?.
Pour le M (majuscule), dès que j'utilise la touche SHIFT il considère que c'est faux alors que je n'est pas encore appuyé sur la touche t.

voici la code utilisé :

keyListener = new Object();
keyListener.onKeyDown = function() if (Key.getCode() 84) { // 84 T
         gotoAndStop(2);
       Key.removeListener(keyListener);


} else {  // si pas t
 
 gotoAndStop(3);
  Key.removeListener(keyListener);
 }


};
Key.addListener(keyListener);

HELP ME please !!!!
Manuken

11 réponses

cs_adv Messages postés 149 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 28 janvier 2011 2
6 oct. 2006 à 17:15
Salut,

t'es pas loin.


La fontion onEnterFrame
ne te serre à rien. L'écouteur sur le clavier est suffisant.
Comme je ne sais pas exactement ce que tu cherches à faire j'ai compléter la fonction onKeyDown de l'exemple.
Son comportement est le suivant :
   - affichage des caractères [a-zA-Z] et espace dans le champ texte "txt_cla"
   - considère le caractère "T" comme la bonne réponse et va à l'image "vrai"
   - considère le caractère "t" comme la mauvaise réponse et va à l'image "faux"

Voici la fonction à remplacer:
//lorsque l'on appuie une touche
keyListener.onKeyDown = function(){
    var car_code = Key.getCode();
    var ascii_code:Number;
   
    switch(car_code){
        case 16: //majuscule
            etat_maj = true;
            break;
     }
     //si c'est une touche entre 65 ("A") et 90 ("Z")
     if((car_code >= 65 and car_code <= 90)){
        //si la touche majuscule n'a pas encore été relachée
        //ou si la touche caps est lockée
        if(etat_maj or etat_caps){
            txt_cla.text = txt_cla.text + chr(car_code);
            ascii_code = car_code;
        }else{//sinon afficher la caractère en minuscule
            ascii_code = car_code+32;
            txt_cla.text = txt_cla.text + chr(car_code+32);
            trace("min : " + ascii_code);
        }
     }else if(car_code == 32){//espace
         txt_cla.text = txt_cla.text + chr(car_code);
        ascii_code = car_code;
     }
     
     switch (ascii_code){
         case 116: //t: mauvaise réponse
             Key.removeListener(keyListener);
            gotoAndStop("faux");
            break;
        case 84: //"T": bonne réponse
            Key.removeListener(keyListener);
            gotoAndStop("vrai");
            break;
     }
};

J'espère que ça t'aidera. à plus.
adv
3
shubenka Messages postés 759 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 12 novembre 2008
2 oct. 2006 à 11:24
Salut
Et bien tu fait pareil sauf que tu change 84 par le code correspondant a la touche voulu.
si tu a pas envie de regarder dans la doc
keyListener.onKeyDown = function()
trace(Key.getCode());
}
et tu appuie sur les touche accentué pour avoir le code des touches.

<hr />http://www.carton.c.la
0
manuken Messages postés 22 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 15 décembre 2006
2 oct. 2006 à 14:24
Merci de ta réponse,
Bé oui ca m'affiche bien le code de la touche
mais si je veux faire un 2
il me faut taper sur SHIFT ( donc code 16) puis 2 (code 50)

mon code réagit donc à la première frappe sur SHIFT et fait un goto n°d'image

Vois-tu le truc qui cloche dans le code ?

j'ai bien essayé ca
if (Key.getCode()16 && Key.getCode() 50) {

mais ca marche pas.

merci.
Manuken
0
shubenka Messages postés 759 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 12 novembre 2008
2 oct. 2006 à 15:53
ah ui
qu'elle idée d'utilisé shift aussi. tu ne peut pas t'en passé ?
sinon shift tu le gére uniquement quand il est relaché http://wiki.media-box.net/documentation/flash/key/onkeyup
<hr />http://www.carton.c.la
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
manuken Messages postés 22 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 15 décembre 2006
3 oct. 2006 à 09:16
Hé hé salut...
Si c'était simple je n'aurais pas posé la question....
Merci de ta réponse.

J'ai essayé le OnkeyUp
Ce que j'en conclue c'est que part cette méthode il n'y a pas moyen  de lui faire afficher un 2 en faisant SHIFT + (2é~)
Par contre un 2 via le pavé numérique pas de problème ! c'est le code 98...

Le but de mon jeu est d'initier le joueur au maniement des touches du clavier donc de savoir s'il doit appuyer sur SHIFT ou pas pour faire une lettre en majuscules ou le caractère de dessous...

Je suis étonnné que Flash ne le premette pas. Ou alors vu que je suis débutant, je ne connais pas la méthode.

La touche é a pour code 50 et 233 en ASCII
la touche SHIFT le code 16 et 0 en ASCII
la touche 2 du pavé numérique le code 98 et 50 en ASCII

Y-a-t-il pas moyen de bidouiller un truc pour qu'il retourne l'appui des touches SHIFT + 2  avec le code du 2 au pavé numérique ? Histoire de le blouser ?

Merci
Manuken

 
0
cs_adv Messages postés 149 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 28 janvier 2011 2
5 oct. 2006 à 15:25
Salut,
pour faire la différence entre les majuscules et minuscules, tu peux garder en mémoire l'état des touches MAJ et CAPSLOCK.

Dans onKeyDown "MAJ = true" et rien ne change pour CAPSLOCKDans onKeyUp "MAJ false" et "CAPSLOCK not CAPSLOCK" (il s'inverse)

Après, tu fais un test "if(MAJ or CAPSLOCK)" et voilà.
J'ai vite testé et la source (qui n'a pas lieu d'être déposée comme source) se trouve ici:
http://www.odv.ch/flash/listen_key.zip

J'espère que ça t'aidera, bonne chance.
adv
0
manuken Messages postés 22 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 15 décembre 2006
6 oct. 2006 à 10:57
adv,
 tout d'abord un grand merci pour ton aide et cet exemple que j'ai étudié à fond !!!

on va dire que j'ai compris le principe mais je n'arrive pas à l'additionner avec ce que je veux faire par la suite....

au lieu d'afficher tes champs texte dynamique dans le onenterframe = fonction()

j'ai mis ca :

onEnterFrame = function ()
{



 if (etat_maj true && Key.getCode() 84){ // T
  
  Key.removeListener(keyListener);
  gotoAndStop(59);                            // l'image où il y a marqué BIEN
 } if (etat_maj false && Key.getCode() 84){ // t
  Key.removeListener(keyListener);
  gotoAndStop(60);                           // l'image où il y a marqué FAUX
  
 }
};


Je suis dans la séquence où la bonne réponse est le "t" minucule....

Avec ce code ca marche une fois sur 2 (ce qui est bizarre...) et en plus il ne se passe rien si le joueur frappe une autre touche

Une fois sur l'image BIEN ou FAUX, j'ai un bouton qui envoie le joueur sur une autre séquence avec une autre lettre à taper....

Mon niveau de débutant est à son max avec ce code.... en grois c'est un peu chaud et je n'avance pas....
Merci de ton aide .... mais encore un ptit coup de main sera pas de refus.....

;) manuken
0
shubenka Messages postés 759 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 12 novembre 2008
6 oct. 2006 à 11:19
onEnterFrame = function ()
{
 if (etat_maj true && Key.getCode() 84){ // T
  
  Key.removeListener(keyListener);
  gotoAndStop(59);                            // l'image où il y a marqué BIEN
 } if (etat_maj false && Key.getCode() 84){ // t
  Key.removeListener(keyListener);
  gotoAndStop(60);                           // l'image où il y a marqué FAUX
  
 }
};


<hr />
http://www.carton.c.la
0
cs_adv Messages postés 149 Date d'inscription vendredi 30 mai 2003 Statut Membre Dernière intervention 28 janvier 2011 2
6 oct. 2006 à 11:27
Avec la correction proposée par shubenka ça devrait fonctionner.


<hr size="2" width="100%" />
Petite note de programmation:
Mais il faut arrêter avec ces "etat_maj==true".

etat_maj est un boolean, il peut donc prendre la valeur false ou true.

A quoi bon faire un test entre 2 boolean qui renvoit un resultat boolean.
Ca revient à faire if(true == true) ce qui est complétement inutile.

tu peux simplement utiliser le boolean, sans faire de test.
Ce qui donne:




"if (etat_maj && Key.getCode() == 84)"



<hr size="2" width="100%" />



Voilà, on attend de tes nouvelles, à plus.
adv
0
manuken Messages postés 22 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 15 décembre 2006
6 oct. 2006 à 14:09
<hr />
Merci les gars...
Bien vu le cours de programmation, compris ... ! ;)

Pour ce qui est des nouvelles Pfffff c'est pas la joie....
De nature obstiné, je suis en train de craquer LOL
Je me vois obligé de vous envoyer tout le code car il doit y avoir une erreur que je ne trouve pas....
Ca devient assez dur, là.....grrrrrrr
(Je bosses sur  Flash MX version 6)<hr />var keyListener new Object();keyListener.onKeyDown function ()
{
    var _l1 = Key.getCode();
 

    switch (_l1)
    {
        case 16:
        {
            etat_maj = true;
            break;
        }
    } // End of switch
    if (_l1 >= 65 && _l1 <= 90)
    {
        if (etat_maj || etat_caps)
        {
            txt_cla.text = txt_cla.text + chr(_l1);
        }
        else
        {
            txt_cla.text = txt_cla.text + chr(_l1 + 32);
        } // end if
    }
    else if (_l1 == 32)
    {
        txt_cla.text = txt_cla.text + chr(_l1);
    } // end if
};
keyListener.onKeyUp = function ()
{
    var _l1 = Key.getCode();
    switch (_l1)
    {
        case 16:
        {
            etat_maj = false;
            break;
        }
        case 20:
        {
            etat_caps = !etat_caps;
            break;
        }
 }// End of switch
};
Key.addListener(keyListener);
onEnterFrame = function ()
{
   // bonne réponse t
 if (etat_maj && Key.getCode() == 84){ // T
  trace ("faux");
  gotoAndStop(59);
  Key.removeListener(keyListener);
  
 }
 if (Key.getCode() == 84){ // t
 trace ("ok");
  Key.removeListener(keyListener);
  gotoAndStop(60);
  
 }
};
<hr />Merci
0
manuken Messages postés 22 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 15 décembre 2006
8 oct. 2006 à 14:45
 ADV MERCI BEAUCOUP !
Ton aide m'a été très précieux

Je me suis enfin sorti de ce code pas évident du tout pour moi...

Le résultat est visible ici.

Cela correspond bien à ce que je voulais faire
même si il y a des ptits trucs que j'ai pas réussi :
- exemple : détecter le @ avec la combinaison AltGr + 0
- ou afficher les lettres ou chiffres à taper dans un ordre aléatoire en sachant qu'il y a 20 lettres dans 20 séquences....
Hé oui on va dire que c'est codé à mon niveau.... Hé hé !

Merci encore, on va dire que c'est la version 1 de ce petit jeu et qu'il ne demande qu'à être améliorer....

VIVE le site FlashKod et les forums d'entraide...
Manuken
0
Rejoignez-nous