Récupérer une saisie clavier de l'utlisateur

Le tutoriel en ligne vous pose quelques problèmes ? C'est ici pour en parler !

Messagede moi1392 le 31 Mai 2005 22:52

pour effacer le contenu d'une surface, rien de plus simple... tu colorie la surface en noir avec SDL_FilleRect :)

ça donne un truc du genre :

Code: Tout sélectionner
SDL_FillRect( surf, NULL, 0 );


Au fait, ça fait un bout de temps que je ne t'ai plus vu :) t'avais des exams ?

Sinon, pour ce que tu essais de faire, tu as vue le tutorial 5 ?? ça fait exactement ça ;) en plus y'a un makefile ! donc t'as qu'à taper make, ça compile et puis tu lance l'executable pour tester :oui:
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

le BAC

Messagede YuGiOhJCJ le 03 Juin 2005 18:07

Oui j'ai le BAC je commence le 8 juin...Ca stresse je révise!

Par contre, je veux pas colorier ma surface en noir car ya un arrière plan derrière et ça va faire moche un carré noir à la place de la surface.

Il me faut donc utiliser la transparence peut être?
Justement je n'arrive pas à l'utiliser.

Si c'est bien la méthode de la tranbsparence qu'il faut utiliser, répond moi sur le topic correspondant. Thx.
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 03 Juin 2005 18:48

Cela dépends de quelle surface tu parles !! pour effacer une image.. il faut l'effacer (normal.. ;)) et donc y'a pas d'autres méthodes que de la colorier dans une couleur qui représente du "rien" pour ton programme.

Maintenant, c'est sur qu'on efface jamais une surface dans laquelle on a chargé un bitmap.Au lieu de cela, on se contante d'effacer la surface primaire (celle sui représente l'écran) et de tout redissiner à chaque rafraichissement ! (tous les jeux font comme ça en tout cas !!)

D'ou l'interet de charger toutes des images dans des surface "off screen" pour les copier au bon endroit de l'écran à chaque rafraichissement.
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 21 Juin 2005 14:26

Pour effacer une image, tu me dis donc qu'il faut colorier dans une couleur qui represente du "rien". Mais SDL_FillRect(sfc_soldat1, NULL, 0 ); ça represente du noir pas du transparent!

Et puis c'est pas très "propre" comme programmation le SDL alors? On ne fait que colorier par dessus à chaque fois? Yen a des couches et des couches d'images empilées les unes sur les autres après.

Ca bouffe pas des ressources?
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 21 Juin 2005 20:52

c'est pas le sprite qu'il faut effacer !! mais l'écran ! à chaque début de boucle de jeu, avant l'affichage, tu effaces l'écran.

Désolé je suis un peu surmené en ce moment, mais ça ira bientot mieux, je te montrerai comment faire sur les sources que tu m'as envyé :)

promis, le 29 juin au soir, je t'écris ça !! si j'oublie, tu sera en droit de mi'insulter et de m'envoyer quelques messaes privés pour me le rapeller !!!!
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede ryoko.lila le 22 Juin 2005 10:37

Si tu veux, YuGiOhJCJ, je peut l'insulter avec toi (et aussi lui donner un coup de hache) :D
(Désolé, je vien jamais ici et quand jai vu ca, pas pu me retenir^^", t'as le droit de l'effacer moi1392)
Les gens compliquent tout pour avoir l'impression de vivre.
Patrick Rambaud


:mimi:
Avatar de Nacrym
Avatar de l’utilisateur
ryoko.lila
Chocobo Ode
Chocobo Ode
 
Messages: 4271
Inscription: 20 Oct 2004 14:50
Localisation: A votre avis....
Jeu(x) du moment: P3 et FF3 (que de 3)

Messagede moi1392 le 23 Juin 2005 09:31

Ca passe pour cette fois.. mais que je ne t'y reprenne plus [-X (;))
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

thx

Messagede YuGiOhJCJ le 29 Juin 2005 02:23

OK!
Je ne me permetterai pas de t'insulter après tout ce que tu as fé pour moi quand même...
Sans toi je ne saurai encore rien ne programmation SDL.
Le 4 juillet j'ai les résultats du BAC! Je pense sérieusement ne pas l'avoir...Peut être repeché :non: Mais même ansi c pas dit de l'avoir :cry:
Tu vois moi aussi je suis occupé ya pas de probs :pouce: je te comprends!
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 30 Juin 2005 09:25

voila, j'ai un peu retoucher le switch dans le programme que tu m'avais envoyé.
jettes y un oeil

Code: Tout sélectionner
   // la vitesse de déplacement du sprite
   int vitesse_sprite = 1;

   /*Attendre l'appui d'une touche*/
   while(SDL_WaitEvent(&event)){
      switch (event.type){
              case SDL_QUIT:   //Lorsque l'on ferme la fenêtre
               exit(0);
         break;

         case SDL_KEYDOWN:
         // on ne dessine pas ici,
         // ça ne sert qu'à récuperer les évenement et à agir en conséquence.
                         switch (event.key.keysym.sym){
            case SDLK_ESCAPE:
            exit(0);
            break;
            case SDLK_UP:
            position_soldat1.y -= vitesse_sprite;
            break;
            
            case SDLK_DOWN:
            position_soldat1.y += vitesse_sprite;
            break;
            
            case SDLK_LEFT:
            position_soldat1.x -= vitesse_sprite;
            break;

            case SDLK_RIGHT:
            position_soldat1.x += vitesse_sprite;
            break;

            case SDLK_PLUS:     // la touche plus
            case SDLK_KP_PLUS:  // la touche plus du pavé numérique
            vitesse_sprite++;
            break;

            case SDLK_MINUS:    // la touche moins
            case SDLK_KP_MINUS: // la touche moins du pavé numérique
            vitesse_sprite--;
            break;
         }
                         break;
                }
      
      // on dessine le tout !!

      // on commence par effacer la fenêtre.
      SDL_FillRect(sfc_fenetre, NULL, 0);

      // on y dessine le terrain
      SDL_BlitSurface(sfc_terrain, NULL, sfc_fenetre, NULL);

      // on y dessine le sprite
      SDL_BlitSurface(sfc_soldat1, NULL, sfc_fenetre, &position_soldat1);

      // si tu as d'autres choses à dessiner, tu le fait ici.

      // on met à jour l'écran
      SDL_UpdateRect(sfc_fenetre, 0, 0, 0, 0);
   }



alors pour les remarques :
    - Comme tu peux le voir, à chaque tour de boucle, on éfface tout ce qu'il y a à l'écran et on redessine tout !! Ce n'est pas mal :non: c'est fait comme ça partout !

    - évite de mélanger le code de mise à jour (dans le switch) avec le code d'affichage. d'ailleurs, je les ai séparés.

    - essais au maximum de ne pas mettre de chiffre dans le code, mais seulement des variables ou des constantes (#define xxx 1), j'ai simplement remplacé ton ++ par une variable, et j'ai réussi facilement à ajouter de nouvelles possibilités ! d'ailleurs, au lieu d'écrire vitesse_sprite = 1, j'aurais du écrire vitesse_sprite = VITESSE; et un #define VITESSE 1 au début du fichier ou ailleurs.

    - quand tu défini une chaine de caractères entre "", tu n'as pas besoin de mettre le \0 terminal, il est mis automatiquement par le compilateur : "Images/Icones/icone.bmp" ai lieu de "Images/Icones/icone.bmp\0" Attention, dans les autres cas, n'oublie pas de le mettre ;)

    - tu utilises la boucle d'évenements des premiers exemples du tutorial, elle marche mais à quelques inconvénients, en particulier si tu veux faire des animations !! A partir du tutorial 4 (le timer) j'explique une nouvelle façon de faire. Essais d'y passer, de toute façon, il faudra y passer un jour ou l'autre.

    - n'oublie pas de vérifier la position de tes objets : quend tu déplace ton sprite, vérifie qu'il ne sors pas de l'écran, sinon ne le déplaces pas.. pareil pour le changement de vitesse avec + et - , je ne l'ai pas fait pour que ce soit plus simple à lire, mais il faudrait vérifier que la vitesse ne devienne pas négative et qu'elle ne dépasses pas une certaine limite (if (vitesse > 0) vitesse--; et if (vitesse < LIMITE) vitesse++; par exemple, fait pareil avec la position du sprite)


il y a d'autres petites remarques, mais si tu arrives à suivre ces primière, ça sera déà très bien :oui:

PS : désolé, j'ai un jour de retard sur la date promise :(

PS2 : y'a que yugiho qui a le droit de m'insulter !! toute tentative par une autre personne se verra riposter violamment :oui:
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede ryoko.lila le 30 Juin 2005 09:59

PS : désolé, j'ai un jour de retard sur la date promise

PS2 : y'a que yugiho qui a le droit de m'insulter !! toute tentative par une autre personne se verra riposter violamment

Mince j'avais déja préparer mes insultes et ma hache :axe:
Pour pas gacher je vais les utiliser sur Makoo :twisted:
PS: :occasion4: (bien ouai...)
PS2: :sororc:
Les gens compliquent tout pour avoir l'impression de vivre.
Patrick Rambaud


:mimi:
Avatar de Nacrym
Avatar de l’utilisateur
ryoko.lila
Chocobo Ode
Chocobo Ode
 
Messages: 4271
Inscription: 20 Oct 2004 14:50
Localisation: A votre avis....
Jeu(x) du moment: P3 et FF3 (que de 3)

Messagede Makoo le 30 Juin 2005 10:05

(excusez moi pour la gêne occasionnée, ça ne se reproduira plus sur cette partie du fofo)

Pour pas gacher je vais les utiliser sur Makoo Twisted Evil

Tu sais que je t'adore toi ? huk huk :D
Solve a man's problems with violence, help him a day. Teach a man to solve his problems with violence, help him for a lifetime !
Avatar de l’utilisateur
Makoo
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3514
Inscription: 05 Mar 2005 12:48
Localisation: A coder devant mon pc (et à faire de la musique dans mon antre)
Le jeu qui vous a fait connaître le site: Star Ocean 3 (même si c'est honteux, il est terriblement mauvais ...)
Jeu(x) du moment: Vagrant Story (... ba quoi ?)

De retour

Messagede YuGiOhJCJ le 12 Sep 2005 21:41

Salut je suis de retour avec le BAC en poche!
Je l'ai eu du 1er coup :langue:

Sinon pour la prog je viens de m'y remettre et je suis enfin arrivé à faire un petit BMP que l'on déplace avec les flèches et que à chaque déplacement du BMP, on efface tout et on redéssine tout.

En fait avec:

Code: Tout sélectionner
/*Effacement de la fenêtre*/
SDL_FillRect(sfc_fenetre, NULL, 0 );


Ca marche nikel ce qu'il y a c'est que faut tout redéssiner c'est étrange mais ça marche bien :pouce:
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

erreur compil

Messagede YuGiOhJCJ le 12 Sep 2005 21:47

Sinon une erreur apparait lors de la compile...Enfin c'est plutôt un avertissement sinon ça compilerait pas :-k
Voilà ça dit:
Code: Tout sélectionner
make
cc  -I/usr/include/SDL -D_REENTRANT -Wall -L/usr/lib-lSDL -lpthread essaiSDL.c -o a.out
essaiSDL.c:19: attention : return type defaults to `int'
essaiSDL.c: Dans la fonction « main »:
essaiSDL.c:23: attention : implicit declaration of function `exit'
essaiSDL.c:25: attention : implicit declaration of function `atexit'
essaiSDL.c:145: attention : enumeration value `SDLK_UNKNOWN' not handled in switch
essaiSDL.c:145: attention : enumeration value `SDLK_FIRST' not handled in switch
essaiSDL.c:145: attention : enumeration value `SDLK_BACKSPACE' not handled in switch
essaiSDL.c:145: attention : enumeration value `SDLK_TAB' not handled in switch
essaiSDL.c:145: attention : enumeration value `SDLK_CLEAR' not handled in switch
essaiSDL.c:145: attention : enumeration value `SDLK_RETURN' not handled in switch
essaiSDL.c:145: attention : enumeration value `SDLK_PAUSE' not handled in switch
essaiSDL.c:145: attention : enumeration value `SDLK_SPACE' not handled in switch
...


Et ainsi de suite jusqu'à ce que tous les SDLK_XXX soient passés...
Tu pourrais me traduire ça?
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Messagede moi1392 le 12 Sep 2005 21:49

ajoute un "default:" dans ton switch avec aucune action ;)

Code: Tout sélectionner
switch (...)
{
case SDLK_xxx:
    blabla;
    break;

...
...

default:
    ;
}


voila ;)

Content de te revoir quand même !! et félicitation pour ton baccalauréat :oui: !!
Avatar de l’utilisateur
moi1392
Chocobo des mers profondes
Chocobo des mers profondes
 
Messages: 3986
Inscription: 27 Juin 2004 12:03
Localisation: chez wam

Messagede YuGiOhJCJ le 13 Sep 2005 12:21

OK merci.
Bon là je vais en IUT éloigné de chez moi donc je serais absent pendant un moment encore.
Bonne continuation pour ton site ;)
[yugiohjcj.free.fr]
Yu-Gi-Oh! Jeu de Cartes à Jouer
Avatar de l’utilisateur
YuGiOhJCJ
Bébé Chocobo
Bébé Chocobo
 
Messages: 121
Inscription: 22 Fév 2005 21:58
Localisation: Devant mon ordinateur en train de développer

Précédent

Retourner vers Besoin d'aide en SDL ?

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités

cron