SDL : récupérer le clavier en plusieurs fois
astrocurieux
-
paly2 Messages postés 261 Statut Membre -
paly2 Messages postés 261 Statut Membre -
Bonjour les pros,
je me bagarre avec la SDL depuis 24h mais pas moyen de trouvé une solution a mes problème. je vais les mettre en gras pour vous mettre sur les bonnes pistes.
je m'explique, la fonction que voici reçoit un événement clavier en paramètre.
c'est le 'Event' je ne sait ni de qu'elle type il est, ni comment m'en servir ...
logiquement il doit s’agir d'une lettre ou d'un chiffre mais la encore je sait pas vérifier cela.
cette fonction reçoit les événement les uns après les autres, a fur et a mesure que je tape au clavier, et je désire qu'elle soit capable d'enregistrer sous forme de std::string ou de char * les différentes frappes qu'elle aura reçut
(logiquement 9 frappes), mais voila je ne sait pas comment faire .
cette fonction n'est bien entendue pas seul, j'ai au dessus d'elle une boucle qui choppe les frappes clavier avec SDL_WaitEvent qui vérifie rapidement si il ne s’agit pas de la touche échap ou entrer puis il l'envoie a ma fonction .
pouvez vous m'aidez ??
je n'est pas la moindre idée de comment la coder ...
je me bagarre avec la SDL depuis 24h mais pas moyen de trouvé une solution a mes problème. je vais les mettre en gras pour vous mettre sur les bonnes pistes.
je m'explique, la fonction que voici reçoit un événement clavier en paramètre.
c'est le 'Event' je ne sait ni de qu'elle type il est, ni comment m'en servir ...
logiquement il doit s’agir d'une lettre ou d'un chiffre mais la encore je sait pas vérifier cela.
cette fonction reçoit les événement les uns après les autres, a fur et a mesure que je tape au clavier, et je désire qu'elle soit capable d'enregistrer sous forme de std::string ou de char * les différentes frappes qu'elle aura reçut
(logiquement 9 frappes), mais voila je ne sait pas comment faire .
int Save_Write(SDL_Surface *Win, int nbr, SDL_Event event)
{
static char name[10] = {0};
if (nbr < 10)
sprintf(name, "%d", event);
Init_Write(Win, name, .....);
return (nbr);
}
cette fonction n'est bien entendue pas seul, j'ai au dessus d'elle une boucle qui choppe les frappes clavier avec SDL_WaitEvent qui vérifie rapidement si il ne s’agit pas de la touche échap ou entrer puis il l'envoie a ma fonction .
pouvez vous m'aidez ??
je n'est pas la moindre idée de comment la coder ...
A voir également:
- SDL : récupérer le clavier en plusieurs fois
- Sdl no available video device ✓ - Forum C
1 réponse
event n'est ni un nombre, ni une lettre (au passage, une lettre est un nombre en C) : c'est une structure de type SDL_Event, dont tu trouveras la documentation ici : https://wiki.libsdl.org/SDL_Event
Note qu'un événement n'est pas forcément une touche appuyée. C'est le cas seulement si event.type (qui pour le coup est un nombre) est égal à SDL_KEYDOWN .
Si une touche est appuyée, les informations concernant cette touche se trouvent dans la sous-structure event.key de type SDL_KeyboardEvent, et notamment le nom de la touche dans event.key.keysym.sym (et ce n'est ni un nombre, ni une strucutre, c'est une énumération).
Il te faut donc faire un switch (par exemple) pour faire correspondre à chaque valeur de event.key.keysym.sym un caractère de type char. La documentation t'y aidera: https://wiki.libsdl.org/SDL_Keycode .
Ta fonction doit ensuite ajouter le caractère obtenu à la fin de ta chaîne name.
Note qu'un événement n'est pas forcément une touche appuyée. C'est le cas seulement si event.type (qui pour le coup est un nombre) est égal à SDL_KEYDOWN .
Si une touche est appuyée, les informations concernant cette touche se trouvent dans la sous-structure event.key de type SDL_KeyboardEvent, et notamment le nom de la touche dans event.key.keysym.sym (et ce n'est ni un nombre, ni une strucutre, c'est une énumération).
Il te faut donc faire un switch (par exemple) pour faire correspondre à chaque valeur de event.key.keysym.sym un caractère de type char. La documentation t'y aidera: https://wiki.libsdl.org/SDL_Keycode .
Ta fonction doit ensuite ajouter le caractère obtenu à la fin de ta chaîne name.