Partage
  • Partager sur Facebook
  • Partager sur Twitter

Freeze de la SDL lors de l'ajout de fonctions

    28 mai 2022 à 9:21:14

    Bonjour,

    Je réalise un jeu en SDL pour un projet dans mon école. J'ai commencé par le réaliser en C et maintenant je souhaite avoir une interface graphique donc j'utilise la SDL.

    Cependant dans l'une de mes fenêtres lorsque j'utilise des fonctions réalisées avant, la fenêtre générée freeze et je ne peux pas rentrer les informations nécessaires à la fonction dans la console. Cela vient peut être d'un problème de boucle ou quelque chose de similaire, mais je ne vois pas.

    Merci par avance.

    Code:

        while(launched)
        {
            SDL_Event evenement;
    
            player joueur1;
            player joueur2;
    
            int tas=20;
            int choix;
    
            SDL_RenderClear(moteur);
            SDL_RenderCopy(moteur, texture, NULL, &menu);
    
            afficher_allumettes_SDL(RectangleAll, moteur, TextureAll, tas);
            SDL_RenderPresent(moteur);
    /* Problème freeze
            initialisation_joueurs(&joueur1, &joueur2);
    
            entree_noms_joueurs(&joueur1);
            entree_noms_joueurs(&joueur2);
    */
            while(SDL_PollEvent(&evenement))
            {
                switch(evenement.type)
                {
                    case SDL_QUIT:
                        launched = SDL_FALSE;
                        break;
    
                    case SDL_MOUSEBUTTONUP:
                        if(evenement.button.button == SDL_BUTTON_LEFT)
                        {
                            Uint8 etat_souris = SDL_GetMouseState(&x, &y);
    
                            choix = choix_allumettes_SDL(tas, joueur1, joueur2, moteur, rectangle1, rectangle2, rectangle3);
                            printf("ValeurChoix : %i",choix);
    
                            if (rectangle4.x < x && x < rectangle4.x + rectangle4.w && rectangle4.y < y && y < rectangle4.y + rectangle4.h)
                            {
                                launched = SDL_FALSE;
                                break;
                            }
                       break;
                        }
                }
            }
        }
        SDL_DestroyRenderer(moteur);
        SDL_DestroyWindow(fenetre);
        
        SDL_Quit();
        }

    et voila pour les fonctions:

    void initialisation_joueurs (player * joueur1, player * joueur2)
    {
    	srand(time( NULL ));
    
        joueur1->marqueur = rand() % 2; //reste de la division euclidienne d'un nombre aléatoire par 2
    	joueur1->NbVictoires = 0;
    
        joueur2->marqueur = 1 - joueur1->marqueur;
    	joueur2->NbVictoires = 0;
    }
    
    void entree_noms_joueurs (player * joueur)
    {
    	printf("\nSaisir un nom :\n");
    	scanf("%s",joueur->NomJoueur);
    }




    • Partager sur Facebook
    • Partager sur Twitter
      28 mai 2022 à 15:45:06

      Salut, tu peux me montrer ton code avant la boucle ?

      Ah oui, et je pense si je ne me trompe pas, la fonction "scanf" bloque le programme, ducoup si tu veux que ta fenêtre "refonctionne", tu dois finir de remplir ta saisie.

      • Partager sur Facebook
      • Partager sur Twitter
        28 mai 2022 à 19:23:23

        Hello,

        La fonction scanf() n'est clairement pas utilisable conjointement avec sdl. Il faudra trouver une autre manière d'entrer des informations avec sdl. Peut-être (jamais utilisé) avec SDL_StartTextInput() ?

        Edit: un exemple ici (l'auteur fait partie de ceux qui ont développé sdl). Pas testé. Si jamais tu testes, fais un feedback.

        -
        Edité par edgarjacobs 28 mai 2022 à 19:58:23

        • Partager sur Facebook
        • Partager sur Twitter

        On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

          29 mai 2022 à 10:42:54

          Ça n'a effectivement aucun sens d'utiliser scanf dans une application graphique. Cela impliquerait d'avoir à utiliser la console et la fenêtre en même temps !

          Par contre comme SDL est très barebone, tu vas devoir coder un espèce d'“input box” pour afficher et éditer le texte de l'utilisateur quand il massacre son clavier.

          • Partager sur Facebook
          • Partager sur Twitter

          git is great because Linus did it, mercurial is better because he didn't.

            29 mai 2022 à 19:33:59

            markand a écrit:

            Par contre comme SDL est très barebone, tu vas devoir coder un espèce d'“input box” pour afficher et éditer le texte de l'utilisateur quand il massacre son clavier.


            Je l'ai écrit pour la version 1.x . Vraiment pas évident à gérer si on veut être complet: curseur clignotant ou non suivant mode insert ou replace, gestion des touches home / end (avec un input plus long que la fenêtre d'input), le background à afficher (colueur fixe ou transparent pour l'utilisation du background en cours), delete ou backspace, insertion du clipboard, ....

            -
            Edité par edgarjacobs 29 mai 2022 à 19:36:56

            • Partager sur Facebook
            • Partager sur Twitter

            On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

              29 mai 2022 à 19:45:12

              Wow edgarjacobs, ça à l'air un peu compliqué à faire :waw:
              • Partager sur Facebook
              • Partager sur Twitter
                29 mai 2022 à 20:16:30

                En SDL 1 c'était compliqué, ça l'est un peu moins avec SDL 2 qui gère très bien les insertions unicode via les fonction StartTextInput etc, ça ouvre par exemple un clavier sur iOS/Android. Toi tu as « plus qu'à » concaténer les évènements dans un buffer et l'afficher.
                • Partager sur Facebook
                • Partager sur Twitter

                git is great because Linus did it, mercurial is better because he didn't.

                Freeze de la SDL lors de l'ajout de fonctions

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown