voila j'ai repris le code du site pour le deplacement des sprite
je voudrai aussi lors de la gestion d'evenement lorsque j'appuie sur la touche espace supprimer un sprite de l'ecran et en faire apparaitre un nouveau
voici le code
- Code: Tout sélectionner
#include <SDL.h>
#include<stdio.h>
#include<stdlib.h>
#include<SDL_audio.h>
#include<SDL_mixer.h>
#include<SDL_TTF.h>
#include<SDL_image.h>
#include <string>
#include "test.h"
#define HAUT 0
#define DROITE 1
#define BAS 2
#define GAUCHE 3
#define AUCUNE_DIRECTION 0
#define DIRECTION_HAUT 1
#define DIRECTION_DROITE 2
#define DIRECTION_BAS 4
#define DIRECTION_GAUCHE 8
// declaration
SDL_Event Event_jeu2;
SDL_Rect rect2, dst2,dstblue2;
Uint8 *keys2;
SDL_Surface *image2,*terrain2 = NULL, *panier2=NULL, *screen_jeu2 =NULL, *sprite2= NULL, *sponsor2, *ballon=NULL;
void jeu1()
{
int bFin = 0;
Uint32 temps_courant, prochain_rendu = 0;
/*declaration des sprites*/
Sprite spjoueur3, spjoueur4,spjoueur5;
/* initialisation de SDL_Video */
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) < 0)
{
fprintf(stderr, "Echec d'initialisation de SDL.\n");
}
printf("Bonjour le monde, SDL est initialisé avec succès.\n");
/* On fixe le mode d'affichage à 640*480*16 plein ecran.*/
screen_jeu2 = SDL_SetVideoMode(1024, 655, 16, SDL_HWSURFACE |SDL_DOUBLEBUF);
if ( screen_jeu2 == NULL )
{
fprintf(stderr, "Echec de changement du mode video : %s.\n", SDL_GetError());
}
/* On charge le sprite controlable avec l'image pecheur.bmp */
if ( !chargerSprite( &spjoueur3, "./image/sprite/joueur2.bmp" ) )
{
SDL_Quit();
}
if(!chargerSprite(&spjoueur4, "./image/sprite/joueur1.bmp"))
{
SDL_Quit();
}
if ( !chargerSprite( &spjoueur5, "./image/sprite/test1.bmp" ) )
{
SDL_Quit();
}
/*chargement des images*/
terrain2 = SDL_LoadBMP("./image/terrain2.bmp");
panier2 = SDL_LoadBMP("./image/panier2.bmp");
sponsor2=SDL_LoadBMP("./image/sponsor.bmp");
// on place le sprite que l'on controle au milieu
spjoueur3.dest.x = 246;
spjoueur3.dest.y = 500;
spjoueur4.dest.x=100;
spjoueur4.dest.y=500;
fixerDirectionSprite( &spjoueur3, DIRECTION_BAS );
fixerDirectionSprite( &spjoueur3, AUCUNE_DIRECTION );
fixerDirectionSprite( &spjoueur4, DIRECTION_BAS );
fixerDirectionSprite( &spjoueur4, AUCUNE_DIRECTION );
spjoueur5.dest.x=100;
spjoueur5.dest.y=100;
fixerDirectionSprite( &spjoueur5, DIRECTION_BAS );
fixerDirectionSprite( &spjoueur5, AUCUNE_DIRECTION );
while (!bFin)
{
while (SDL_PollEvent(&Event_jeu2))
{
switch (Event_jeu2.type)
{
case SDL_KEYDOWN:
switch (Event_jeu2.key.keysym.sym)
{
case SDLK_ESCAPE:
bFin = 1;
sortie();
break;
// on deplace le sprite au clavier
case SDLK_RIGHT:
fixerDirectionSprite( &spjoueur3, DIRECTION_DROITE );
break;
case SDLK_d:
fixerDirectionSprite (&spjoueur4,DIRECTION_DROITE);
break;
case SDLK_LEFT:
fixerDirectionSprite( &spjoueur3, DIRECTION_GAUCHE );
break;
case SDLK_q:
fixerDirectionSprite (&spjoueur4,DIRECTION_GAUCHE);
break;
case SDLK_SPACE:
/*ici je voudrai supprimer un sprite et en rechargerun */
supprimerSprite(&spjoueur3);
miseAJourSprite( &spjoueur5);
dessinerSprite (&spjoueur4, screen_jeu2);
SDL_UpdateRect(screen_jeu2, 0, 0, 0, 0);
break;
break;
default:
printf("Une touche à été pressée.\n");
}
break;
case SDL_KEYUP:
switch (Event_jeu2.key.keysym.sym)
{
// on deplace le sprite au clavier
case SDLK_RIGHT:
if (spjoueur3.direction == DIRECTION_DROITE)
fixerDirectionSprite( &spjoueur3, AUCUNE_DIRECTION );
break;
case SDLK_d:
if (spjoueur4.direction == DIRECTION_DROITE)
fixerDirectionSprite( &spjoueur4, AUCUNE_DIRECTION );
break;
case SDLK_LEFT:
if (spjoueur3.direction == DIRECTION_GAUCHE)
fixerDirectionSprite( &spjoueur3, AUCUNE_DIRECTION );
break;
case SDLK_q:
if (spjoueur4.direction == DIRECTION_GAUCHE)
fixerDirectionSprite( &spjoueur4, AUCUNE_DIRECTION );
break;
default:
;
}
break;
case SDL_QUIT:
bFin = 1;
break;
default:
;
}
}
/* On recupère le temps écoulé en mili-secondes */
temps_courant = SDL_GetTicks();
// puis les positions des sprites
miseAJourSprite( &spjoueur3 );
miseAJourSprite (&spjoueur4);
/* On dessine la scene */
/* On efface l'écran */
SDL_FillRect(screen_jeu2, NULL, 0);
apply_surface (0,0,terrain2,screen_jeu2);
apply_surface (190,200,panier2,screen_jeu2);
apply_surface(10,500,sponsor2,screen_jeu2);
/* On dessine les sprites à l'écran */
dessinerSprite( &spjoueur3, screen_jeu2 );
dessinerSprite (&spjoueur4, screen_jeu2);
/* On met à jour de la zone d'affichage de la fenetre */
SDL_UpdateRect(screen_jeu2, 0, 0, 0, 0);
}
supprimerSprite( &spjoueur3);
supprimerSprite (&spjoueur4);
SDL_FreeSurface(terrain2);
SDL_FreeSurface(panier2);
SDL_Quit();
}
lorsque j'execute ce code en supprimant avec la touche espace
il me met l'erreur suivant
Fatal signal: Segmentation Fault (SDL Parachute Deployed)
je ne sais pas du tout ce que c'est cette erreur
merci pour vos reponses[/code]