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

SDL Discussion :

Aucun événement détecté par SDL_PollEvent()


Sujet :

SDL

  1. #1
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut Aucun événement détecté par SDL_PollEvent()
    Bonjour,

    J'ai vu sur le forum que de nombreux posts parlaient de mon problème, à savoir des événements non traités, mais aucune solution ne correspond réellement à mon problème : quoi que je fasse, la fonction SDL_PollEvent() ne détecte jamais lorsque j'appuie sur une touche.

    Voici mon code, j'ai simplifié à l'extrême pour m'assurer que le problème ne vienne pas d'une autre partie de mon code :

    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
    #include <stdio.h>
    #include <SDL\SDL.h>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    	SDL_Event event;
    	bool bContinue = true;
     
    	while(bContinue)
    	{
    		while(SDL_PollEvent(&event))
    		{
    			switch(event.type)
    			{
    				case SDL_KEYDOWN : printf("down");
    							break;
    				case SDL_KEYUP: printf("up");
    							break;
    			}
    		}
    	}
     
    	return 0;
    }
    SDL_PollEvent() est bien dans un while(), mais rien n'est détecté. À un moment j'avais mis un printf() juste au dessus du switch(), mais rien, il ne rentre donc jamais dans la boucle (la taille du fichier stdout.txt reste à 0 et il disparaît lorsque je quitte le programme, rien n'y est donc écrit).

    En fait le programme ne fait rien et lorsque je fais un Ctrl+C, dans ma ligne de commande je vois toutes les touches sur lesquelles j'ai appuyé pendant que le programme tournait.

    Je me demande si le problème ne vient pas de mon environnement de développement : Mingw/MSYS (sur Windows donc).
    J'ai juste décompressé l'archive de SDL et ai copié les headers dans Mingw\include\SDL, pareil pour les lib.
    Tout ce qui est compilation et liens fonctionnent très bien.

    J'ai lu quelque part qu'il fallait utiliser sdl-config, je l'ai rajouté dans ma ligne de commande (`sdl-config etc...`), mais rien n'y fait. En même temps je ne l'ai pas modifié et j'ai vu que le préfixe était mauvais (pas /usr).

    Quelqu'un peut-il m'aider ?

    Merci.
    Cordialement.
    Errare humanum est ... sed humanus naturae erratum est.

  2. #2
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    En fait après quelques essais, je viens de me rendre compte que c'est spécifiquement les événements liés au clavier qui ne sont pas pris en compte. J'ai modifié mon code en rajoutant une fenêtre OpenGL ainsi que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    case SDL_QUIT : printf("quit");
    		bContinue = false;
    		break;
    et lorsque je clique sur la croix pour fermer la fenêtre, le fichier stdout contient bien "quit", l'événement est donc bien pris en compte. Maintenant je dois voir pourquoi les SDL_KEYDOWN et SDL_KEYUP ne font rien.

    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
    while(bContinue)
    	{
    		while(SDL_PollEvent(&event))
    		{
    			switch(event.type)
    			{
    				case SDL_KEYDOWN : printf("down");
    						   break;
    				case SDL_KEYUP: printf("up");
    						break;
    				case SDL_QUIT : printf("quit");
    						bContinue = false;
    						break;
    			}
    		}
    	}
    Errare humanum est ... sed humanus naturae erratum est.

  3. #3
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    Apparemment les SDL_KEYDOWN et SDL_KEYUP ne sont pris en compte que dans une fenêtre Windows, et non dans une console de commande.
    Je suppose qu'il s'agit là d'un comportement normal.

    J'ai également testé avec les SDL_PRESSED et SDL_RELEASED.
    Le SDL_RELEASED n'a pas l'air d'être détecté, même dans une fenêtre Windows et le SDL_PRESSED n'est pas détecté plus de 3 ou 5 fois, selon que j'appuie sur une touche à la fois ou si j'appuie sur 2 touches consécutives.

    Quelqu'un sait-il me dire pourquoi ?
    Merci.
    Errare humanum est ... sed humanus naturae erratum est.

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Oui c'est normal pour les evenements clavier. Obligé d'être dans la fenetre.

    Par contre il y'a quand meme moyen de pouvoir aussi lire ce qui est tappé dans la console... mais il ne faut pas passer par la SDL.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre régulier Avatar de Hypnos
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2002
    Messages : 87
    Points : 108
    Points
    108
    Par défaut
    Ok, merci de ta réponse.

    Dans mon application, je gère les événements qui surgissent dans une fenêtre SDL, donc je ne vais pas chercher plus loin pour l'instant.

    Merci à ceux qui m'ont lu.
    Errare humanum est ... sed humanus naturae erratum est.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/03/2015, 18h14
  2. Gérer les évènements VBA par programmation
    Par gbuxo dans le forum VBA Access
    Réponses: 14
    Dernier message: 09/05/2006, 11h13
  3. problème détecté par dxdiag !
    Par praoune dans le forum Sécurité
    Réponses: 10
    Dernier message: 24/03/2006, 19h45
  4. PSQLException "Aucun résultat retourné par la requête&q
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/09/2005, 20h55
  5. récupérer l'événement "fermeture par la croix" de
    Par hamurielle dans le forum Windows Forms
    Réponses: 4
    Dernier message: 08/04/2005, 10h35

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