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

Allegro Discussion :

Débutant Allegro - frappe clavier non récupérée [Allegro 5]


Sujet :

Allegro

  1. #1
    Candidat au Club
    Homme Profil pro
    Maker
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Maker
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Débutant Allegro - frappe clavier non récupérée
    Bonjour,

    Je commence sous Allegro, j’apprends en parallèle le C++ en autodidacte. Le chemin est encore long.

    Je suis le cours de Frederic Drouillon mais j'ai quelques difficultés.

    Pour l'instant, je cherche à récupérer la frappe clavier dans la queue d’événement et afficher la touche sur la console native. J'ai mis en place ma queue, la console fonctionne, mais je n'arrive pas du tout à récupérer les ALLEGRO_KEY_EVENT_CHAR ... Je vous met mon code. Désolé pour toutes les annotations, ça m'aide à réfléchir.
    Le code n'est certainement pas très propre, pour l'instant je ne cherche même pas à afficher quel caractère est tapé, mais juste si il y a eu une frappe, mais seule la touche ESC est détectée, surement car il est déclaré dans le WHILE. Je n'arrive pas à savoir si je me gauffre dans la structure du if ou si ma queue d'évenement ne fonctionne pas, ou encore si ma boucle while est mal paramétrée.

    Avez vous une idée de ce que je fais mal ?

    Merci d'avance

    RLF

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <allegro5/allegro.h>
    #include <allegro5/allegro_native_dialog.h>
     
     
    void erreur(const char*txt)
    {
        ALLEGRO_DISPLAY*d;
        d = al_is_system_installed() ? al_get_current_display() : NULL;
        al_show_native_message_box(d, "ERREUR", txt, NULL, NULL, 0);
        exit(EXIT_FAILURE);
    }
    bool Debug = 1;
    /*****************************************************************
    *****************************************************************/
    int main()
     
    {
        ALLEGRO_DISPLAY*display;
        ALLEGRO_KEYBOARD_STATE key;
        ALLEGRO_TEXTLOG*console = NULL;
        ALLEGRO_EVENT_QUEUE *queue;
        //ALLEGRO_EVENT_QUEUE* queue; //file d'attente des evenements
     
        if (!al_init())
            erreur("al_init()");
     
        if (Debug)  //ouvre la console debug seulement si DEBUG = 1
        console = al_open_native_text_log("Debug Console", 0);
        al_append_native_text_log(console, "*** Bienvenue dans la console de Debug ***\n");
     
        if (!al_install_keyboard())
            erreur("al_install_keyboard()");
        else al_append_native_text_log(console,"keyboard init\n");
     
         //CREATION DE LA QUEUE
        queue = al_create_event_queue();
        if (!queue)
            erreur ("al_create_event_queue()");
        else al_append_native_text_log(console,"queue init\n");
        //SOURCE DE LA QUEUE
        al_register_event_source(queue, al_get_keyboard_event_source());
     
        display = al_create_display(800, 600);
        if (!display)
            erreur("al_create_display()");
            else al_append_native_text_log(console,"Display init\n");
     
     
            al_clear_to_color(al_map_rgb(0,0,0));
            al_flip_display();
     
        do  {
            al_get_keyboard_state(&key);
            }
     
     
     
    while   (!al_key_down(&key, ALLEGRO_KEY_ESCAPE));
     
        {
            ALLEGRO_EVENT event = { 0 };
            al_wait_for_event_timed(queue, &event, 1.0 / 10);
     
            //RECUPERATION DE LA TOUCHE ET AFFICHAGE
     
            if(!al_key_down(&key, ALLEGRO_EVENT_KEY_CHAR));
     
            //LA FRAPPE N'EST DETECTEE QUE POUR LA TOUCHE ESC !!! LE PROBLEME EST DANS LES PARAMETRES DE LA BOUCLE WHILE ?
            //OU DANS LES PARAMETRES DE MON IF
                {
                //char *label = event.keyboard.repeat ?"repeat" : "KEY_CHAR";
                const char *touche = al_keycode_to_name(event.keyboard.keycode);
                al_append_native_text_log(console,"KEY CHAR DETECTED", touche,"\n");
                }
        }
        al_rest(2.0);
        al_destroy_display(display);
        al_destroy_event_queue(queue);
        return 0;
    }

  2. #2
    Expert éminent sénior
    Avatar de Kannagi
    Homme Profil pro
    cyber-paléontologue
    Inscrit en
    Mai 2010
    Messages
    3 214
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cyber-paléontologue

    Informations forums :
    Inscription : Mai 2010
    Messages : 3 214
    Points : 10 140
    Points
    10 140
    Par défaut
    Une raison d'utiliser Allegro ?
    Vu que tout le monde à migrer sur SDL2 ou SFML ^^'

    (Juste pour dire que je pense que tu n'aura pas trop d'aide sur allegro , vu que c'est une lib assez vielle).

  3. #3
    Candidat au Club
    Homme Profil pro
    Maker
    Inscrit en
    Avril 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Maker
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Hello,

    Merci de ta réponse,

    Pas vraiment de raison pour utiliser cette API et effectivement, si c'est si vieux, je m'engage vers une mauvaise piste. Vu que je commence à peine, c'est mieux que je parte sur quelque chose de plus actuel.

    Je vais donc jeter un oeuil aux APIs que tu cite

    Merci.

    RLF

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 861
    Points : 219 058
    Points
    219 058
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    En lisant en diagonale, vous semblez ne récupérer que la dernière touche de votre saisie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    do  {
            al_get_keyboard_state(&key);
            }
     
     
     
    while   (!al_key_down(&key, ALLEGRO_KEY_ESCAPE));
    Et votre saisie doit toujours finir par un Echap. Par conséquent, vous n'allez voir que des Echap.
    C'est donc un problème de construction de la boucle. Il faut que pour chaque touche récupérée, vous fassiez une action à l'écran (si vous souhaitez en avoir le résultat immédiatement), ou que vous mettiez les touches dans un tampon pour les traiter plus tard.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/12/2005, 15h03
  2. [VBA] Mise à jour à chaque frappe clavier
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 07/11/2005, 12h07
  3. [débutant] Static références et non-static références ?
    Par Sarvok dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 01/11/2005, 12h51
  4. [Débutant] console , entrée clavier
    Par maminova dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 18/10/2005, 10h49
  5. Clavier et envoie de données sans frappe clavier
    Par Alexandre T dans le forum Administration système
    Réponses: 4
    Dernier message: 07/05/2005, 17h05

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