pika84 | Bonjour
Je réalise un shoot them up en c++ avec sdl.
J'ai tout d'abord un petit probleme, je n'arrive pas à utiliser les itérateurs de la classe vector de std.
( il me met une erreur avec cette ligne : vector<T>::iterator _ptr; )
Deuxiemement je n'arrive pas à gérer l'affichage de mes missiles.
Voila ma methode : lorsque j'appuis sur espace (la touche missile), j'insere un objet "missile" dans un vecteur, puis lors de l'affichage du scrolling et du vaisseau ,j'affiche aussi tout les missiles présents dans mon vecteur.
Mais cela ne marche pas, lorsque je clique sur espace, un coup ca marche , un coup ca plante ?!
Je me permet de mettre des extraits de mon code :
Voici tout d'abord les fonctions permettant d'afficher un missile
Code :
- /*--------------- AfficheMissile() ---------------------------------------------*/
- void AfficheMissile(Missile objet )
- {
- rctPositionMissile.x = objet.getX();
- rctPositionMissile.y = objet.getY();
- afficherImage("images/TurboLaser.png",rctPositionMissile.x,rctPositionMissile.y);
- }
- /*--------------- AfficheVectMissile() ---------------------------------------------------*/
- void AfficheVectMissile( Vecteur<Missile* > M ){
-
- if (M.vide()) {}
- else{
- M.moveFirst();
-
- // Pour tout les missiles qu'il y a dans le vecteur
- for ( int i = 0; i < M.getTaille(); i++ ){
- // on déplace le missile
- M.get()->deplace();
- // On affiche le missile
- AfficheMissile( *( M.get() ) ) ;
- // On va au prochain missile
- M.moveNext();
- }
- }
- }
|
Puis le morceau de code gérant le jeu en lui meme :
Code :
- while (continuerApplication){
- if ( scroll < 800 ){
- DrawIMG( sfcImageFond, 0, ( int ) scroll, 1280, ( int ) ( 800 - scroll ),0, 0 );
- DrawIMG( sfcImageFond, 0, 0, 1280, ( int ) ( 1280 - ( 800 - scroll ) ), 0,( int ) ( 800 - scroll - 1 ) );
- }else{
- scroll = 0;
- DrawIMG( sfcImageFond, 0, ( int ) scroll, 1280, ( int ) ( 800 - scroll ),0, 0 );
- DrawIMG( sfcImageFond, 0, 0, 1280, ( int ) ( 1280 - ( 800 - scroll ) ), 0,( int ) ( 800 - scroll - 1 ) );
- }
- scroll = scroll + 3;
- SDL_Delay( 1 );
- afficherImage(joueur->getImage(),rctPositionJoueur.x,rctPositionJoueur.y);
- // On affiche les missiles du joueur
- AfficheVectMissile(vctMissile);
- SDL_Flip(ecran);
-
- keystates = SDL_GetKeyState( NULL );
- //Si Haut est pressé
- if( keystates[ SDLK_UP ] ) {
- if (rctPositionJoueur.y - 10 > 10)
- rctPositionJoueur.y = rctPositionJoueur.y - 10;
- }
- if( keystates[ SDLK_RIGHT ] ) {
- if (rctPositionJoueur.x + 10 < 1180)
- rctPositionJoueur.x = rctPositionJoueur.x + 10;
- }
- if( keystates[ SDLK_LEFT ] ) {
- if (rctPositionJoueur.x - 10 > 10)
- rctPositionJoueur.x = rctPositionJoueur.x - 10;
- }
- if( keystates[ SDLK_DOWN ] ) {
- if (rctPositionJoueur.y + 10 < 650)
- rctPositionJoueur.y = rctPositionJoueur.y + 10;
- }
- if( keystates[ SDLK_SPACE ] ) {
- // On crée un missile
- rctPositionMissile.x = rctPositionJoueur.x;rctPositionMissile.y = rctPositionJoueur.y;
- int dommage = 10, munition = 100000, vitesse = 10, cadence = 10;
- Missile* A = new Missile(dommage,munition,vitesse,cadence,"images/TurboLaser.png","TurboLaser.wav" );
- A->setX(rctPositionMissile.x);A->setY(rctPositionMissile.y);
- // On le place dans le vecteur d'affichage des missiles
- vctMissile.ajouterEnTete(A);
- FSOUND_PlaySound(FSOUND_FREE,sampleMissile);
- }
-
- while(SDL_PollEvent(&event)){
- if ( event.type == SDL_QUIT )
- continuerApplication = 0;
- if ( event.type == SDL_KEYDOWN ){
- if ( event.key.keysym.sym == SDLK_a)
- continuerApplication = 0;
- }
- }
- }
|
Si vous avez des idées sur le problème, ca serait super !!
Si vous avez un peu de temps et que voulez le code entier pour mieux comprendre , je peux l'envoyer par mail.
Merci beaucoup |