begin process at 2012 05 29 13:22:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Mettre à jour une fenêtre SDL


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Mettre à jour une fenêtre SDL

dimanche 26 décembre 2010 à 15:41:41 | Mettre à jour une fenêtre SDL

asprog

Bonjour;

je me suis chargée de faire un jeu de casse brique sous C++ en utilisant des classes
que je dois les créer(orienté objet) ainsi que la bibliothèque de classe SDL,voici mes classes :Raquette,classe Brique,Classe Balle,...
j'ai commencé par la création de la fenêtre et ça marchait très bien ensuite j'ai créer une raquette qui se déplace quand j'appuie sur les touches Left & right du clavier enfin j'ai créer les briques;mais quand j'exécute; la première fenêtre que j'ai crée s'affiche et il contient l'image du fond et la brique et quand j'appuie sur la touche left ou right du clavier une autre fenêtre qui contient la raquette et la brique s'affiche mais il ne contient pas l'image du fond , je sais bien que le problème provient du SDL_Flip qui met à jour la fenêtre mais je ne sait pas comment la manipuler :voici mon code
Code :

Code C/C++ :
//l'implémentation:  Raquette.cpp
Raquette::Raquette ( int initialX, int initialY, int nbrFramesW, int nbrFramesH, char* file,SDL_Surface* screen){
                 loadSpriteSheet ( file );
  
    _x = initialX;
    _y = initialY;
    _w =nbrFramesW;
    _screen=screen;
    _h =nbrFramesH;
 
                   }
                   
                   
void Raquette::loadSpriteSheet(char* file){
      _spriteSheet = SDL_LoadBMP ( file );
        }
   
void Raquette::move(){
     bool running=true;
       //  Uint8 *keys = SDL_GetKeyState(NULL);
                 SDL_WaitEvent ( &event );
          
           while (running){
                 
     if (SDL_PollEvent(&event)){
       switch ( event.type ) {
               case SDL_QUIT:
                     running = false;
                      break;
                      
                 case SDL_KEYDOWN:
                      
                       switch ( event.key.keysym.sym ) {
                       
                          case SDLK_LEFT:
                   if (_x<0)_x=10;
                                                     
                             _x=_x-15; break;
    
                            
                          case SDLK_RIGHT:
                               if (_x>480)_x=500;
                               _x=_x+15;break;
                                            
                 }
                               
                 }
               
                  show(_screen);
                  
                 
                
                }
                
                 }
               
   
                 }
                         
                 void Raquette::show(SDL_Surface* sscreen){
                      SDL_Rect frameRect;
     
     Brique b(12,12,12,12,"Brique/brique1.bmp",sscreen);
     b.show();
     SDL_Rect pos;
     
     pos.x = _x;
     pos.y = _y;
     
        SDL_FillRect ( _screen, NULL, SDL_MapRGB ( _screen->format, 20, 200, 20 ) );
     SDL_BlitSurface ( _spriteSheet, NULL, sscreen, &pos );
                  //  SDL_Flip ( _screen );
                  //  SDL_Delay ( 60 );  
  
                      }
                 
void Raquette::limite(){
     bool running=true;
     if (_x<0){
     
     while(running){
      _x=_x+15;              
     show(_screen);
    running=false;
    }
     
     }
     
     
     }
//l'implémentation : brique.cpp
 
Brique::Brique(int x,int y,int w,int h,char *file,SDL_Surface * Screen)
{
                   loadFile(file);
                   _x=x;
                   _y=y;
                   _w=w;
                   _h=h;
                   _screen=Screen;
                   }
                   void Brique::loadFile(char* file)
                   {
                        
                        _sbrique=SDL_LoadBMP(file);
                                                }
                                                void Brique::placerBrique(){
                                                        show();
                                                                                                                      
                             }
                             void Brique::show(){
                                  SDL_Rect pos;
     
     pos.x = _x;
     pos.y = _y;
     
      
     SDL_BlitSurface ( _sbrique, NULL, _screen, &pos );
                          SDL_Flip(_screen);
                           //SDL_Delay(60)       ;
                                  }
 
//  main.cpp
    SDL_Init(SDL_INIT_VIDEO);
  Screen=SDL_SetVideoMode(_SCREEN_WIDTH,_SCREEN_HEIGHT,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
  SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY,SDL_DEFAULT_REPEAT_INTERVAL+(1/100));
  
  fond=SDL_LoadBMP("fond.bmp");
   Raquette r(_SCREEN_WIDTH/3,_SCREEN_HEIGHT-20,15,5,"raquet.bmp",Screen);
         
  
   SDL_BlitSurface(fond,NULL,Screen,&rfond);
                
        r.move(); 
        SDL_Flip(Screen);
  SDL_Delay(60);    


merci de m'avoir aider(ce que je dois enlever et ce que je dois ajouter dans mon code) sachant que je suis débutante en C++
jeudi 30 décembre 2010 à 21:00:00 | Re : Mettre à jour une fenêtre SDL

pop70

A mon avis, le problème est le suivant,
le main :

Code C/C++ :
   SDL_BlitSurface(fond,NULL,Screen,&rfond);
                
        r.move(); // Ici le fond n'est pas blitté.
        SDL_Flip(Screen);
  SDL_Delay(60);



On se rend compte que show(_screen) n'affiche que la raquette et les briques, autrement dit, dans la boucle while il n'y a pas le fond n'est pas remis, il disparait.

Ce qu'il faudrait, c'est passer le fond en argument au constructeur de raquette pour que celui-ci puisse l'afficher avant show(_screen).

ça donnerait :

Code C/C++ :
Raquette::Raquette ( int initialX, int initialY, int nbrFramesW, int nbrFramesH, char* file,SDL_Surface* screen, SDL_Surface* fond){
	loadSpriteSheet ( file );
{
...
wFond = fond;
}
void Raquette::move()
{
//...
while (running)
{
//...
SDL_Rect posFond;
posFond.x = 0;
posFond.y = 0; 
           SDL_BlitSurface(wFond,NULL,Screen, &posFond);
		show(_screen);
}
}



...À essayer

Pop70


Cette discussion est classée dans : int, sdl, raquette, brique, screen


Répondre à ce message

Sujets en rapport avec ce message

[SDL] Fenetre qui s' affiche et disparait aussitot [ par jonezy ] Bonjour Je debute en programmation, j'ai telechargé ce code qui est cencé etre un jeu de serpent avec SDL. Quand je l'execute la fenêtre apparaît et LNK2005 et LNK1169, sur VS2008 avec SDL [ par Metalbobinou ] Bonjour, mes erreurs sont classiques d'apres google, mais je n'ai pas encore compris comment les resoudre... (meme en fouiannt un peu)... Je connais v petit probleme SDL [ par DarthKhaos ] Bonjour, voila j'ai un petit souci, j'ai un projet ou je dois faire bouger un bras robotisé aprés plusieur test sa marche a merveille, en selectionnan Probleme morpion en SDL c++ [ par juju116 ] Salut tout le monde! j'expose donc mon souci pour l'instant mon programme affiche une image en fond d'ecran et bizarement cette image est bien chargé Problème pour calculer le H pour l'A star ( * ) [ par jedinos ] Bonjour à tous ! [url=http://www.siteduzero.com/tutoriel-3-34333-le-pathfinding-avec-a.html]Dans ce tuto du pathfinding A star[/url] , l'auteur ne no Probleme avec la librairie sdl et code::blocks [ par BencoAndCo ] Bonjour, J'ai un problème avec la lib sdl et code::blocks quand je compile le prog suivant : #include #include #include int main(int argc, ch sdl et vc++2010 [ par hb2012 ] slt tout le monde, je sais bien mes amis que c'est pas possible d'afficher une image avec c++. par contre je m'adresse à vous pour savoir s'il existe Probleme en prog SDL.h [ par sieuzac ] Salut a tous.Je voudrez savoir pourquoi mon va plus vite au TEMP 2 qu'au TEMP 1#include #include #include #include /* surface qui sert à l'affich SDL et windows.h sous sygwin [ par agent933 ] salut je travaille en ce moment sur un programme en langage.grosso modo jutilise le port serie pour recevoir donnees et ensuite utilise une interface [Xcode]Aide integrer image [ par mirmoleboss ] Bonjour, Voilà j'ai fait ce petit code mais il ne marche pas enfin il marchait mais l'intégration d'une image ne marche pas, je ne vois pas d'où vient


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,374 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales