Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SDL] Procedure de saisie

    12 juin 2006 à 15:23:09

    Bonjour,
    Je suis tout nouveau et impréssioné par la richesse des tutoriaux de ce site :)
    Celui sur la librairie SDl m'a particulierement intéréssé.

    Néanmoins je recontre une difficultée.
    Je souhaiterais faire saisir a l'utilisateur des informations (les scanf ne marhe pas apparament :/)
    J'ai beau avoir cherché sur internet, je n'est trouvé que tres peu d' informations a ce sujet...
    Dois- je en deduire qu'il faut tout meme créer une procedure enregistrant les evenements du clavier?
    Dans ce cas la il faudrait un if/case pour chaque touche??

    Si quelqu'un pouvait m'aider svp je sui debutant :)
    Mon prog source etant deja terminé en mode dos (gestion d'un video location avec fichier) celui-ci tournera t'il en sdl ou la gestion ds fichiers est differentes?

    Merci d'avance :)
    un nouveau petit zero^^
    • Partager sur Facebook
    • Partager sur Twitter
      12 juin 2006 à 15:28:04

      Toutes les instuctions C reste les mêmes donc la gestions des fichiers est la même !

      Par contre pour demander des infos à l'utilistaeur il faudrait utiliser SDL_console (une extension au même titre que SDL_image) qui est assez compliquée d'après ce qu'on m'en a dit et de plus l'interface graphiqueque permet SDL ne servirait plus à rien (vu que la console reprend le dessus) !

      Alors soit tu crées toi-même ton interface de demande à l'utilisateur, soit tu cherche une extensions SDL qui le fait déjà mais j'en est jamais entendu parler, soit tu te tournes vers une autres librairies (une GUI comme GTK+ par exemple)
      • Partager sur Facebook
      • Partager sur Twitter
        12 juin 2006 à 15:36:39

        Créer une interface ca je l'est compris :)
        Par contre je bloque, sur comment faire saisir des données a l'utilisateur...

        En ayant cherché sur le net je pense qu'il faut créer:
        - une procedure qui recupere les valeurs saisie sur le clavier dans une variable
        - une qui réécrit les valeurs saisie a l'ecran
        J' ai bien étudié le cour de gestion du clavier, et comme je l'est dit plus haut je bloque un peu a ce niveau...(un if par touche?)

        désolée si ce n'est pas tres compréenssif :)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          12 juin 2006 à 15:40:09

          tu peut utiliser SDL_GetKeyName(event.key.keysym.sym)
          j'ai essayé de faire comme toi ya pas si longtemps mais avec cette fonction si tu a un clavier qui se met en qwerty C mort alors j'ai essayé avec le unicode et jy suis pas arrivé

          char* texte;
          texte=SDLGetKeyName(event.key.keysym.sym);
          et ca roule.
          • Partager sur Facebook
          • Partager sur Twitter
            12 juin 2006 à 15:48:21

            Tu peux faire un switch plutôt qu'un if c'est moins lourd mais c'est l'idée !
            • Partager sur Facebook
            • Partager sur Twitter
              12 juin 2006 à 15:54:32

              Si j'ai bien compris la solution de poulcaca, me permettrait d'évité les 50 case du switch^^
              Par contre je sui vraiment débutant, et ja coule un peu la, desolé :(

              Cette fonction renvérait le nom de la touche (je ne l'est pas trouvée dans le cours...)
              mais comment la rendre active svp?
              le "event" l'active a chaque appuit sur une touche?
              SDL_GetKeyName(event.key.keysym.sym)


              Merci beaucoup de votre aide
              • Partager sur Facebook
              • Partager sur Twitter
                12 juin 2006 à 15:57:17

                Je n'avais pas vu l'edit de poulecaca mais apperemment oui ça doit éviter les 36000 cases !

                Je pense qu'il faut que tu mettes ça dans une boucle d'évènement puis pour afficher bas tu utilises SDL_ttf pour afficher texte !
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  12 juin 2006 à 16:19:07

                  exactement monsieur Pierre89 mais comme je l'ai dit si tu appuyé sur a tu aura q enfin ca depend de ton clavier mais espace sera aussi space .... et si tu essaye de changer par des if ca le changera une fois sur deux me demande pas pourquoi si javais la solution jtte l'aurait di lol

                  j'ai trouvé ca aussi si tu compren explique moi lol mais c'est surement la solution http://lazyfooproductions.com/SDL_tutorials/lesson24/index.php
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 juin 2006 à 16:24:36

                    Ca commence doucement a rentré, et je vous remercie beaucoup de toute votre aide :)
                    J'ai donc créée ce petit bout de code.
                    Il capte bien l'evenement lorsque l'on appuit sur une touche
                    il releve bien une chaine de caractere
                    Néanmois comme vous me l 'avez expliqué plus haut, j'ai utilisé printf qui ecrit le resultat dans le fichier, hors quelque soit la touche appuyé ce dernier renvoit la valeur '8'.

                    De meme la fonction d'affichage(sdl) n'affiche rien...
                    Je vous mets le code, car l'erreur doit surrement etre enorme (peu etre l ordre des instructions?)

                    int main(int argc, char *argv[])
                    {

                    SDL_Surface *ecran = NULL, *texte;
                    SDL_Rect position;
                    TTF_Font *police = NULL;
                    SDL_Event event;
                    SDL_Color couleurNoire = {0, 0, 0};
                    int continuer = 1;
                    char* saisie;

                    SDL_Init(SDL_INIT_VIDEO); // Démarrage de la SDL (ici : chargement du système vidéo)
                    TTF_Init();
                    ecran = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
                    police = TTF_OpenFont("pol.ttf", 65);


                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 17, 206, 112));

                    /*** On attend l'appuit sur une touche ***/
                    SDL_WaitEvent(&event);
                    saisie=SDL_GetKeyName(event.key.keysym.sym);
                    /*** Ecrit dans le fichier ***/
                    printf("%c", saisie);

                    while (continuer)
                    {
                    SDL_WaitEvent(&event);
                    switch(event.type)
                    {
                    case SDL_QUIT:
                    continuer = 0;
                    break;
                    }
                    /*** Affichage ***/
                    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 50, 255, 255));
                    texte = TTF_RenderText_Blended(police, saisie, couleurNoire);
                    SDL_BlitSurface(texte, NULL, ecran, &position); /* Blit du texte par-dessus */
                    SDL_Flip(ecran);
                    }
                    }

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      12 juin 2006 à 16:30:48

                      j'aurait mit
                      int main(int argc , char *argv[])
                      {
                          int continuer = 1;
                          SDL_Surface *ecran;
                          SDL_Rect position;
                          position.x=4;
                          position.y=4;
                          TTF_Font *font=NULL;
                          SDL_Event event;
                          SDL_KeyboardEvent* eventkey;
                          char* texte;

                          SDL_Init(SDL_INIT_VIDEO);
                          TTF_Init();
                          ecran=SDL_SetVideoMode(FENETRE_LARGEUR,FENETRE_HAUTEUR,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
                          SDL_FillRect(ecran,NULL,SDL_MapRGB(ecran->format,255,255,255));


                          while (continuer)
                          {
                              SDL_WaitEvent(&event);
                              switch(event.type)
                              {
                                  case SDL_QUIT:
                                  continuer=0;
                                  break;
                                  case SDL_KEYDOWN:
                                  SDL_KeyboardEvent *key;
                                  key=event.key;
                                  texte=SDL_GetKeyName(key->keysym.sym);
                                 /*le code pour ecrire du texte*/

                                  break;
                              }
                          }

                          return 1;
                      }


                      EDIT : pour ecrire dans un fichier c'est : fprintf mais auparavant il faut l'ouvrir ... : http://www.siteduzero.com/tuto-3-4522-1-lire-et-ecrire-dans-des-fichiers.html

                      • Partager sur Facebook
                      • Partager sur Twitter
                        12 juin 2006 à 16:59:02

                        Ca y est sa marche :)))
                        pas de pb concernant le clavier pour moi :)
                        Un grand , grand merci pour votre aide, ca m'a bien avancé meme si de nombreuses difficultées restent a venir...
                        Je n'est rien vu mais y a t'il un endroit sur le site ou l'on puisse deposer une source , ca pourrait servir a d'autre personnes (quoi que c'est peu etre trop simple pour les confirmer ;))
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 juin 2006 à 18:07:08

                          Si tu fais un petit programme avec déposes le là :
                          topic des tous les programmes

                          Edit : oublis pas de mettre le source surtout !! ^^
                          • Partager sur Facebook
                          • Partager sur Twitter
                            13 juin 2006 à 17:35:30

                            Salut!
                            A quoi sert le
                            SDL_KeyboardEvent* eventkey;
                            on ne l'utilise pas!

                            Et pourquoi est-ce qu'on initialise
                            case SDL_KEYDOWN:
                                        SDL_KeyboardEvent *key;
                            a chaque tour de boucle?

                            Et pour moi, poulecaca , ton code c'est du C.



                            • Partager sur Facebook
                            • Partager sur Twitter

                            [SDL] Procedure de saisie

                            × 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