bonjour tout le monde voilà mon soucis : je créé les persos d'un jeu (en utilisant la librairie sdl), chaque perso a une classe qui heritent toutes de la classe personnage ; dans la fonction main j'ai une boucle qui recupere les evenements coté joueur ; on demande la mise à jour de la surface ecran à chaque passage dans la boucle ; j'ai une instance de la classe héritée de la classe personnage dont une methode est afficher() et qui doit blitter a chaque passage la posture correspondant à l'événement coté joueur ; à la compilation je n'ai pas d'erreur coté compilateur mais la fenetre ne s'affiche qu'un instant, sans l'image que je suis supposé avoir... bref comme un exemple vaut mieux que la pire des explications (dont je viens de donner un exemple...) voici mon code :
ClasseJim *raph = new ClasseJim;
Personnage:ersonnage(int vie, int x, int y, int anim, int sequence, bool droite)
{
this->droite = droite; // orientation du perso au depart
this->vie = vie;
this->x = x;
this->y = y;
tempx = 0;
tempy = 0;
image = SDL_LoadBMP("spriteJimpx.bmp");
int cptanim = anim; // choix de la posture de départ du personnage
this->sequence = new bool[sequence]; // pied poing arme touché ko mort saisissant marche saut
for(int i = 0; i < sequence; i++) this->sequence[i] = false;
}
void Personnage::afficher(SDL_Surface *ecran)
{
SDL_SetColorKey(image, SDL_SRCCOLORKEY, SDL_MapRGB(ecran->format, 255, 0, 222));
apply_surface(this->x, this->y, image, ecran, &clip[cptanim]);
}
/* la fonction apply_surface() piquée sur le tuto sdl de developpez.com prend en parametre l'absisse et les coordonnées de la partie de l'image à afficher, image est une variable de type SDL_Surface qui pointe sur l'image à afficher, ecran est la surface sur laquelle on blitte l'image, &clip[] correspond à la partie de l'image à afficher */
la main a cette forme :
while(continuer)
{
SDL_PollEvent(&event);
switch(event.type)
{
case SDL_QUIT :
continuer = false;
break;
case SDL_KEYDOWN :
keystates = SDL_GetKeyState(NULL);
if( keystates[SDLK_ESCAPE]) continuer = false;
else
raph->evenement(NULL, keystates, event);
break;
default :
break;
}// fin recupération evenement
SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 255, 255, 255));
apply_surface(0, 0, decors, ecran, NULL);
raph->afficher(ecran);
SDL_Flip(ecran); // mise à jour de l'écran
}// fin boucle continuer
Partager