Salut, j'ai un problème en SDL en C :
J'ai déplacé ma boucle de gestion de mouvements dans une fonction de
perso.c et là ça marche plus, le problème viendrait-il d'une erreur
dans le code ? pourtant j'ai beaucoup cherché...
Tout se link et se compile parfaitement mais plus rien ne se passe à l'appuie sur les touches.
Voici mon code ( s'il y a du code en commentaire c'est que je l'ai déplacé
pour faire des tests, je l'ai coloré volontairement en bleu foncé ) .
Main.c :
#include <stdlib.h>
#include <SDL/SDL.h>
#include "main.h"
SDL_Surface *sEcran, *sVaisseau ;
SDL_Event event ;
void M_Quit() { ... }
void M_Init() { ... }
int main(int argc, char argv[])
{
M_Init() ;
//Variables et initialisation
SDL_Rect Rect_Vaisseau ; //Données sur le Vaisseau
coord(&Rect_Vaisseau) ; //Position de départ du Vaisseau
struct clavier Mouv_Vaisseau ; //mouvements du Vaisseau
Mouv_Vaisseau.keyleft = Mouv_Vaisseau.keyright = 0 ; //Mise à zero des variables de mouvements
SDL_SetColorKey(sVaisseau, SDL_SRCCOLORKEY, SDL_MapRGB(sVaisseau->format, 255, 0, 255)) ; //couleur alpha Vaisseau
//boucle principale
while(1)
{
while(SDL_PollEvent(&event))
{
if(event.type == SDL_QUIT) M_Quit() ;
/* if((event.type == SDL_KEYDOWN) || (event.type == SDL_KEYUP))
{
if(event.key.keysym.sym == SDLK_LEFT)
Mouv_Vaisseau.keyleft = (event.type == SDL_KEYDOWN) ;
if(event.key.keysym.sym == SDLK_RIGHT)
Mouv_Vaisseau.keyright = (event.type == SDL_KEYDOWN) ;
} */
}
//gestion des mouvements
eventmouv(&Mouv_Vaisseau, &Rect_Vaisseau) ;
if(Mouv_Vaisseau.keyright)
{
Rect_Vaisseau.x += 10;
if(Rect_Vaisseau.x >= 700)
Rect_Vaisseau.x = 700 ;
}
if(Mouv_Vaisseau.keyleft)
{
Rect_Vaisseau.x -= 10;
if(Rect_Vaisseau.x <= 0)
Rect_Vaisseau.x = 0 ;
}
//affichage
SDL_FillRect(sEcran, NULL, SDL_MapRGB(sEcran->format, 0, 0, 255)) ;
SDL_BlitSurface(sVaisseau, NULL, sEcran, &Rect_Vaisseau) ;
SDL_Flip(sEcran) ;
}
M_Quit() ;
}
Main.h :
#ifndef GAME_H
#define GAME_H
//gestion du personnage
#include "perso.h"
#endif
perso.h :
#ifndef PERSO_H
#define PERSO_H
struct clavier
{
int keyleft ;
int keyright ;
} ;
void coord(SDL_Rect *dest) ;
void eventmouv(struct clavier *mouv, SDL_Rect *dest) ;
#endif
perso.c :
#include <SDL/SDL.h>
#include "perso.h"
SDL_Event Event ;
void coord(SDL_Rect *dest)
{
dest->x = 300 ;
dest->y = 564 ;
}
void eventmouv(struct clavier *mouv, SDL_Rect *dest)
{
while(SDL_PollEvent(&Event))
{
if((Event.type == SDL_KEYDOWN) || (Event.type == SDL_KEYUP))
{
if(Event.key.keysym.sym == SDLK_LEFT)
mouv->keyleft = (Event.type == SDL_KEYDOWN) ;
if(Event.key.keysym.sym == SDLK_RIGHT)
mouv->keyright = (Event.type == SDL_KEYDOWN) ;
}
/* if(mouv->keyright)
{
dest->x += 10;
if(dest->x >= 700)
dest->x = 700 ;
}
if(mouv->keyleft)
{
dest->x -= 10;
if(dest->x <= 0)
dest->x = 0 ;
} */
}
}
Merci d'avance