Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2759 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [SDL] Affichage dans un thread

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SDL] Affichage dans un thread

n°1395090
Phraides
Posté le 26-06-2006 à 16:16:03  profilanswer
 

Bonjour a tous,
 
Je m'initie en ce moment a la librairie SDL, et je voudrais realiser un simple programme qui affiche une image que l'on peut faire bouger a l'aide des fleches directionnelles.
J'y arrive tres bien en introduisant une boucle infini dans la procedure main, mais comme je prevois d'introduire un systeme client-server, j'ai décidé de mettre tout ce qui concernait l'affichage dans un thread SDL.
Donc je resume :
 
Dans la fonction main, on a la boucle qui gere les events au clavier,
dans le thread my_thread, on a la boucle qui dessine.
 
Seulement cela ne marche pas, j'ai bien mon ecran qui s'affiche, la background, et l'image que je veux faire bouger, et quand j'appuie sur les fleches, je vois des bugs d'affichage, mon image qiu se dessine un peu partout, puis ca ne repond plus, etc...
Je pense que cela vient du thread puisque sans, cela marche bien...
 
Voila mon code, un peu allégé :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string>
  4. #include <SDL/SDL.h>
  5. #include <SDL/SDL_thread.h>
  6. SDL_Surface *back;
  7. SDL_Surface *image;
  8. SDL_Surface *screen;
  9. SDL_Thread *thread= NULL;
  10. int xpos=0,ypos=0;
  11. int done=0;
  12. //initialisation des images
  13. int InitImages()
  14. {
  15.   back = SDL_LoadBMP("bleu.bmp" );
  16.   image=SDL_LoadBMP("loup5.bmp" );
  17.  
  18.   Uint32 colorkey = SDL_MapRGB( image->format,0,0xFF,0xFF);
  19.   SDL_SetColorKey( image, SDL_RLEACCEL | SDL_SRCCOLORKEY, colorkey);
  20.  
  21.  
  22.   return 0;
  23. }
  24. //fonctions d'affichage
  25. void DrawIMG(SDL_Surface *img, int x, int y)
  26. {
  27.   SDL_Rect dest;
  28. [...]
  29.   SDL_BlitSurface(img, NULL, screen, &dest);
  30. }
  31. void DrawIMG(SDL_Surface *img, int x, int y, int w, int h, int x2, int y2)
  32. {
  33.   SDL_Rect dest;
  34.   SDL_Rect dest2;
  35. [...]
  36.   SDL_BlitSurface(img, &dest2, screen, &dest);
  37. }
  38. //dessin du BG
  39. void DrawBG()
  40. {
  41.   DrawIMG(back, 0, 0);
  42. }
  43. //fonction de dessin
  44. void DrawScene()
  45. {
  46.   DrawIMG(back, xpos-2, ypos-2, 132, 132, xpos-2, ypos-2);
  47.   DrawIMG(image, xpos, ypos);
  48.  
  49.   SDL_Flip(screen);
  50. }
  51. //le thread
  52. int my_thread( void *data )
  53. {
  54.   //on dessine la scene  
  55.   while(done == 0)
  56.   {
  57.     DrawScene();
  58.    
  59.   }
  60.     return 0;
  61. }
  62. int main(int argc, char *argv[])
  63. {
  64.   SDL_Init(SDL_INIT_AUDIO|SDL_INIT_VIDEO);
  65.   atexit(SDL_Quit);
  66.   screen=SDL_SetVideoMode(1024,768,32,SDL_HWSURFACE|SDL_DOUBLEBUF);
  67.   InitImages();
  68.   DrawBG();
  69.   //on crée le thread
  70.   thread = SDL_CreateThread( my_thread, NULL );
  71.    
  72.   Uint8* keys;
  73.  
  74.   //boucle qui gere les events clavier
  75.   while(done == 0)
  76.   {
  77.     SDL_Event event;
  78.     while ( SDL_PollEvent(&event) )
  79.     {
  80.       if ( event.type == SDL_QUIT )  {  done = 1;  }
  81.       if ( event.type == SDL_KEYDOWN )
  82.       {
  83.         if ( event.key.keysym.sym == SDLK_ESCAPE ) { done = 1; }
  84.       }
  85.     }
  86.    
  87.     keys = SDL_GetKeyState(NULL);
  88.     if ( keys[SDLK_UP] ) { ypos -= 1; }
  89.     if ( keys[SDLK_DOWN] ) { ypos += 1; }
  90.     if ( keys[SDLK_LEFT] ) { xpos -= 1; }
  91.     if ( keys[SDLK_RIGHT] ) { xpos += 1; }
  92.    
  93.   }
  94.  
  95.   return 0;
  96. }


 
Est ce que c'est un probleme de conflit entre le thread et la procedure main? Faut t'il que j'utlise des mutex?
Si quelqu'un a une idée je suis preneur :)
 
Merci!


Message édité par Phraides le 26-06-2006 à 16:27:03
mood
Publicité
Posté le 26-06-2006 à 16:16:03  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [SDL] Affichage dans un thread

 

Sujets relatifs
Affichage aléatoire d'une image de fondThread ou pas Thread ?
Besoin d'aide affichage variable en phpAffichage code : carrés à la place des sauts de ligne ?
Mauvaise encodage à l'affichageInterface graphique programme en SDL ???
Affichage dans un JPanel.... dans un JPanel ^^Affichage/Masquage de données
Thread en c[pas résolu] problème d'affichage de page web
Plus de sujets relatifs à : [SDL] Affichage dans un thread


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR