Détecter le relachement d'une touche allegro

cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009 - 30 juil. 2007 à 15:47
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 - 30 juil. 2007 à 18:33
Salutations !
Ma question est simple : comment détecter les évenements "appuie d'une touche particuliere " "ou "le relachement d'une touche particuliere" avec allegro ?
je dis "particuliere" car avec allegro , on ne dispose que d'une fonction bool keypressed() ou encore les test pour connaître l'état d'une touche ("enfoncée ou non") mais  pas de test pour détecter le relachement et l'appui....
 Exemple : si  on fait if(key[KEY_A]) action();   action() va boucler si on laisse la touche A appuyée. :'(
Sinon on a readkey()>>8  mais readkey() est blockant  dans la mesure on l'on attent qu'on appuie une touche si le keybuff est vide
(on peut l'utiliser avec if(keypressed()) mais alors impossible de déterminer le relachement d'une touche ?!)
Un fan d'allegro parmis vous a une solution à me proposer ?
(Quand je pense que Mugen a été fait avec allegro , avec toutes les combinaisons impossibles et inimaginables de touches pour déclencher une action; et moi qui cherche juste à détecter le relachement d'une touche :'(   )

Cordialement;
Darksheep

2 réponses

cs_Darksheep Messages postés 69 Date d'inscription samedi 4 novembre 2000 Statut Membre Dernière intervention 15 septembre 2009
30 juil. 2007 à 17:36
bon en fait je viens de trouver XD
bon la solution est moche quand même , si quelqu'un a mieux

bool keypressed(int tkey);
bool keyrelease(int tkey);

bool draw = false;
    while (!key[KEY_ESC]) {
     lastk = currentkey;
     currentkey=0;
     for(int i=1;i<127;i++)
     if(key[i])
      currentkey=i;
 
  
        clear(buffer);
 
     if(keyrelease(KEY_UP))
      draw = !draw;
      if(draw)
      textprintf(buffer,font,200,200,3000,"fucccck");
     
    textprintf(buffer,font,200,234,3000,"currentkey %d,lastkey %d",currentkey,lastk);
    blit(buffer,screen,0,0,0,0,SCREEN_W,SCREEN_H);
}

et puis :
bool keypressed(int tkey)
{
if((lastk!=tkey)&&(currentkey==tkey))
 return true;
return false;
}

bool keyrelease(int tkey)
{
if((lastk==tkey)&&(currentkey!=tkey))
 return true;
return false;
}
0
dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
30 juil. 2007 à 18:33
En effet ca a l'air moche!

Mo ice que j'aurais c'est de creer un tableau de la meme taille que le tableau key d'allegro. Puis je souvegarderais le dernier etat de chaque touche dedans. Ensuite lors d'un test sur une touche, si la touche est actuellement pressé et qu'avant elle etait relachée, alors on vien d'enfoncée la touche et on met a jour le dernier etat de la touche ( c a d enfoncée) Inversement pour detecter le relachement d'une, si le dernier etat est enfoncé et que maintenant c'est relaché alors on vient de relaché la touche et de meme on remet a jour le tableau....

J'ai pas testé ce que je viens de dire mais a mon avis ca prend moins de lignes.
0
Rejoignez-nous