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

C Discussion :

[SDL] Problème avec SDL_Flip()


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut [SDL] Problème avec SDL_Flip()
    Bonjour,

    Je m'excuse d'avance si ce n'est pas le bon forum mais je ne savais pas où le poster.

    J'essaye d'apprendre à utiliser la bibliothèque SDL mais je rencontre une difficulté dont je ne comprend pas la cause.

    Le but est d'ouvrir une fenêtre graphique et lorsque le pointeur passe dedans, des carrés bleux suivent sa trace.

    Voici 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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL.h>
     
    #define Max_Mouse_Pos 20
     
    //==initialisation des variables globalles
     
    	SDL_Surface* screen = NULL ;
     
     
    //Uint16 est un type defini par SDL qui garanti un entier non signé sur 16 bits
    	Uint16 mouse_x[Max_Mouse_Pos];
    	Uint16 mouse_y[Max_Mouse_Pos];
    	Uint16 mouse_pos = 0 ;
    	SDL_Event event ; //sert de buffer au différent type de message
     
    void draw()
    {
     
     SDL_Rect  rect;
     Uint32 color;
     Uint16 index;
     
     
     printf("Je suis dans Draw \n");
     
     //Définition de la couleur noire afin d'effacer l'écran 
       color == SDL_MapRGB(screen->format, 0, 0, 0);
     
     
       SDL_FillRect(screen, NULL, color);
     
        //Définition de la couleur bleue pour afficher les carrés 
         color == SDL_MapRGB(screen->format, 0, 0, 255);
     
       //Affichage de tous les carrés 
      for ((index = 0) ; index < Max_Mouse_Pos ; index++)
       {
     
       rect.w = 5;
       rect.h = 5;
       rect.x = mouse_x[index];
       rect.y = mouse_y[index];
       SDL_FillRect(screen, &rect, color);
     
       } 
     
       //On utilise du double buffer, on change donc de buffer afin d'afficher }
       //SDL_Flip(screen);*/
       printf("Je ici \n");
       SDL_Flip(screen);
       //SDL_UpdateRect(screen, 0, 0, 0, 0);
       }
     
     
     
     
    int main(int argc , char *argv[])
    {
     
    	char bool ='n' ;  //servira de boolean 
     
     
    	if ((SDL_Init(SDL_INIT_VIDEO)) < 0) {printf("Erreur %s \n", SDL_GetError( ) );
    	atexit(SDL_Quit); exit(0);} //securite en cas de pb
     
     
    	//nous lui passons SDL_SWSURFACE et SDL_DOUBLEBUF. SDL_SWSURFACE précise que la mémoire 
    	//vidéo que l'on demande sera allouée dans la mémoire système (par opposition à la mémoire vidéo de la carte). 
    	//C'est souvent plus lent, mais c'est le plus simple et notre programme est un début. SDL_DOUBLEBUF précise que nous voulons travailler en double buffer.
    	screen = SDL_SetVideoMode(640,480,16,
    				  //(SDL_SWSURFACE |
    				  SDL_DOUBLEBUF);
     
    	if (screen == NULL) { printf("Erreur screen null \n"); SDL_Quit ; exit(0);}
    	//sert à déterminer le titre de la fenêtre
    	SDL_WM_SetCaption("Le Serpent",NULL);
     
     
    	do 
    	{
    	do
    	{
    		switch (event.type){
    			//dit au gestionnaire d'événement qu'il faut quitter la boucle
    			case SDL_QUIT : bool = 'o' ; break ;	
    			case SDL_MOUSEMOTION :
    				printf("Je suis dans mouse momo \n");
    				mouse_x[mouse_pos] = (Uint16)event.motion.x; // Il est nécéssaire de caster
    				mouse_y[mouse_pos] = (Uint16)event.motion.y; // TSDL_Event est une union de toutes les structures évenement 
    				mouse_pos = mouse_pos+1;
    				if (mouse_pos == Max_Mouse_Pos) mouse_pos = 0 ;
     
    				break ;
    		}
     
     
    	}while(SDL_PollEvent(&event) == 1); 
    	draw();
    	}while(bool != 'o');
     
     
     
    	SDL_Quit;
     
    	return 0 ;
    }

    Pour la ligne de compilation c'est :
    gcc -o test.out test.c `sdl-config --cflags` `sdl-config -libs` -lSDL_image
    J'ai éssayé de localiser le problème et il a l'air d'arriver lors du SDL_Flip(). Si je saute la ligne,une fenetre noir apparait mais elle n'est jamais redessiner. Si je le remet ou si je fais un SDL_UpdateRect() et que je recompile j'ai une fenetre graphique mais avec un fond ocre qui ne suit pas le déplacement du pointeur.


    Est ce que c'est spécifique à chez moi ?
    Me serais je trompé dans le Code ?

    Ou y'a t'il une solution ?

    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 44
    Par défaut
    Voilà quelques problèmes :
    - SDL_Quit; est faux. Remplace par SDL_Quit();
    - Dans ta fonction draw, tu a écrit color == .... Remplace par color = ....

    J'ai essayé en applicant toutes ces modifications, marche impécable.
    +

    Conseil : n'appelle pas une variable C par un mot clé C++. Cela pourra poser problème si tu compile en C++ plus tard.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 168
    Par défaut
    merci énormément !

    Je viens de remarqué ces erreurs betes * se sent sot *.

    Quand tu parle de mot clé c++, c'est les uint16 etc ?

    Je pensais que cétait des classes, ou type de SDL et non pas du language.

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    non, il parle de char bool ='n' (bool est un mot-clé C++)
    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.

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Syrmonsieur
    Conseil : n'appelle pas une variable C par un mot clé C++. Cela pourra poser problème si tu compile en C++ plus tard.
    Gné ? Qui ferait ça ? C et C++ sont des langages différents. Un programme correct en C n'est pas automatiquement un programme correct en C++.

    Par contre il est parfaitement possible, dans un projet C++, d'avoir certains sources compilés en C et de lier le tout. C'est prévu par le C++, et par le C qui s'engage à ne pas définir la macro __cplusplus, alors qu'elle est toujours définie par le C++..

    Les interfaces mixtes (qui elles, effectivement doivent respecter les mots clés des deux langages) sont différenciées par extern "C" (en C++ uniquement).

    Exemples :

    http://emmanuel-delahaye.developpez.com/clib.htm

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Médinoc
    non, il parle de char bool ='n' (bool est un mot-clé C++)
    et aussi de C99 !

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    Là, c'est plus grave, alors.
    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.

Discussions similaires

  1. [sdl]Problème avec ttf
    Par SiOuZ dans le forum SDL
    Réponses: 3
    Dernier message: 21/05/2009, 16h41
  2. Réponses: 10
    Dernier message: 03/03/2007, 13h46
  3. Problème avec la sdl sur devc++
    Par cuicuicui dans le forum SDL
    Réponses: 3
    Dernier message: 07/08/2006, 13h04
  4. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 09h10
  5. probléme avec la sdl et c++
    Par wikers dans le forum OpenGL
    Réponses: 1
    Dernier message: 10/11/2004, 19h02

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