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 :

[C] Probléme avec une procédure


Sujet :

SDL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut [C] Probléme avec une procédure
    Salut,

    Lors d'un evenement, j'appelle une procédure nommée pause() cependant à l'appel de cette procédure mon programme plante.

    Tout d'abord dans le programme principale je détermine des evenements au clavier:

    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
     while(continuer == 1)
        {
            SDL_PollEvent(&evenement);
     
            switch(evenement.type)
            {
                case SDL_QUIT:
                        continuer = 0;
                break;
     
                case SDL_KEYDOWN:
                        switch(evenement.key.keysym.sym)
                        {
                            case SDLK_ESCAPE:
                                    continuer = 0;
                            break;
     
                            [...]
     
                            case SDLK_p:
                                    pause(); //Lorsque l'utilisateur appuie sur le touche 'p', la procédure pause est appelée
                            break;
                        }
     
                break;
            }
    Voila la procédure pause():
    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
    void pause()
    {
        int pause = 1;
        SDL_Event toucheP; //Déclaration d'un evenement
     
        while(pause == 1)
        {
            SDL_WaitEvent(&toucheP);//Tant qu'il n' y a pas d'evenement tu ne fais rien
            switch(toucheP.type)
            {
                case SDL_KEYDOWN:
                        switch(toucheP.key.keysym.sym)
                        {
                            SDLK_p:
                                pause = 0; //Si l'utilisateur appuie sur la touche 'p', pause reçoit 0 pour ne pas ré-entrer dans la boucle
                            break;
                        }
                break;
            }
     
        }
     
    }
    Donc mon programme tourne correctement et quand j'appuie sur la touche 'p' le programme se met en pause, par contre aprés quand je réappuie sur la touche 'p' sa plante.
    L' IDE ne me renvoie aucun message d'erreur particulier.
    Je pense que le probléme vient de ma procédure pause(), plus précisement lors de l'évenement mais je ne vois pas pourquoi ca ne marche pas.

    En espérant que vous pouvez m'aider.

    Cordialement Sieldev,

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Il y a un point-virgule au while de ta fonction pause(), cela donne une boucle infinie.

    Un compilo bien réglé aurait du te le signaler (il me semble que GCC le fait, pour Visual j'ai un doute...)
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    Oui en effet, merci. J'ai edité mon message précédent pour enlever le point-virgule.
    L' IDE que j'utilise est Code::Block.

    Pour que vous visualisez mieux le probléme, mon programme fait simplement avancer un point sur l'ecran. Et donc quand l'utilisateur appuie sur 'p' je veux mettre en pause le programme, figeant ainsi le point.

    Ca ne marche toujours pas mais il y a une petite évolution.
    Quand j' appuie sur 'p' le programme se met en pause mais quand je ré-appuie sur 'p', le point avance et s'arrete aussitot, comme s' il se remettait sur pause.

    J'ai donc cru que en appuyant sur 'p' pour sortir de la boucle de la procédure pause(), cela ré-appeler la procédure dans le programme principale. J'ai donc changé la touche pour sortir de la boucle dans la procédure pause(), en mettant par exemple la touche o (SDLK_o), mais ca fait la même chose.

    Je ne vois pas ou est le probléme.

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il faut tester le retour des fonctions SDL_PollEvent/SDL_WaitEvent. Ton problème vient de là.

    Par contre, c'est une mauvaise idée de mettre deux codes de gestion d'événements. Il faut en mettre une centrale qui ne gére pas de la même facon le programme s'il est en pause ou non.

    Jc

  5. #5
    Membre éclairé
    Avatar de Sieldev
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    259
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 259
    Par défaut
    D'accord, en envoyant l'adresse de ma variable "evenement" (dans mon programme principal) en paramétre de la procédure ca peut le faire?

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par Sieldev Voir le message
    D'accord, en envoyant l'adresse de ma variable "evenement" (dans mon programme principal) en paramétre de la procédure ca peut le faire?
    Je ne comprends pas ce que tu sous-entendant. Ecris le code et montre le.

    Si ce que tu veux dire c'est avoir une fonction qui gére les événements et dépendant de l'état du programme (en pause on aura une fonction gestionPause et lorsque le programme n'est pas en pause on aura une fonction gestionDeroule) envoit l'évnénement à la fonction gestionPause ou gestionDeroule, alors la réponse est oui

    Jc

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

Discussions similaires

  1. Problème avec une procédure
    Par Thomad dans le forum SQL
    Réponses: 9
    Dernier message: 24/09/2007, 15h07
  2. Petit problème avec une procédure stockée
    Par Poulain dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/05/2007, 18h58
  3. [VB.NET 2.0] - Problème avec une procédure stockée
    Par Khrysby dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/05/2007, 15h25
  4. problème avec une procédure recursive
    Par vbcasimir dans le forum SQL
    Réponses: 1
    Dernier message: 10/06/2005, 16h38
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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