CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

déplacement sdl bizarre

bobtriguette32
bobtriguette32
Niveau 6
09 août 2005 à 23:37:17

Bonjour,

j´ai un gors problème avec sdl. Lorsque je déplace mon image, qui est un gros carré noir. Elle laisse une trainée noire derrière elle. comment effacé cette traineé. Merci

Vengeur41
Vengeur41
Niveau 10
09 août 2005 à 23:41:47

Tu efface l´écran :
SDL_FillRect(Screen,NULL,0)

bobtriguette32
bobtriguette32
Niveau 6
09 août 2005 à 23:53:18

j´ai oublié de mettre mon code le voici:

  1. include < SDL/SDL.h>

SDL_Surface *screen;
SDL_Surface *carre;
SDL_Event event;
SDL_Rect r1,r2,r3;
Uint8 *keys;

void init()
{
SDL_Init(SDL_INIT_VIDEO);
screen =
SDL_SetVideoMode(640,480,32,SDL_HWSURFACE|SDL_DOUB
LEBUF);
}

void load()
{
carre = SDL_LoadBMP("carré.bmp");

SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format
,0,255,0));

SDL_SetColorKey(carre,SDL_SRCCOLORKEY,SDL_MapRGB(c
arre->format,0,0,0));
}

void boucle()
{
int tuxx = 10;
int tuxy = 10;
bool done = false;
while(!done)
{
while(SDL_PollEvent(&))
{
switch(event.type)
{
case SDL_QUIT:
done = true;
break;
}
}
keys = SDL_GetKeyState(NULL);
if(keys[SDLK_UP])
{
if(tuxy>0)
tuxy--;
}

if(keys[SDLK_DOWN])
{
if(tuxy<480 - carre->h)
tuxy++;
}

if(keys[SDLK_RIGHT])
{
if(tuxx< 640 - carre->w)
tuxx++;
}

if(keys[SDLK_LEFT])
{
if(tuxx>0)
tuxx--;
}

r1.w = carre->w;
r1.h = carre->h;
r1.x = tuxx;
r1.y = tuxy;
SDL_BlitSurface(carre,NULL,screen,&1);
SDL_Flip(screen);
}
SDL_FreeSurface(carre);
}

int main(int argc, char **argv )
{
init();
load();
boucle();
return 0;
}

JeanYvesYves
JeanYvesYves
Niveau 10
10 août 2005 à 09:45:20

normal tu ne redessines QUE ton carré a chaque frame :

la machine fonctionne en double buffer :
imagine que devant toi tu as 2 feuilles de papier.
tu en met une devant lécran ( un projecteur on va dire) et l´autre sur ta table a dessin.

tu dessines ton carré sur la feuilel qui est sur ta table.
Ensuite, tu flippes : c´est a dire que tu échanges les feuilles. De ce fait, tu places la feuille ou tu as dessiné devant le projecteur : donc tu y voit sur l´écran.
et tu récuperes l´autre pour dessiner. jusque la c´est bon ?
Ensuite tu dessines ton carré, mais un peu plus loin sur la nouvelle feuille, et tu reflippes.
Que récuperes tu ?
--> la feuille qu´il y avait sur le projecteur : cette feuilel N´EST PAS VIDE : il y a déja ton ancien carré dessiné dessus.
si tu en dessines un autre un peu plus loin, tu vois encore l´ancien. Et si tu continues cela, alors tu vas voir la trainée.
Comprends tu pourquoi tu as la trainée ? :)

Pour enlever cela, une seule solution : effacer l´ancien carré.
Pour cela :
- soit tu redessines un carré énorme, couleur de fond, a chaque frame, donc dans la boucle, avant meme de dessiner quoique ce soit :
ta ligne que tu mets juste apres le while(!done) :
SDL_FillRect(screen,NULL,SDL_MapRGB(screen->format
,0,255,0));
- soit tu t´arranges pour redessiner de partout sur l´image ( principe utilisé dans les jeux : c´est a ça que sert l´image de fond : non seulement ça fait joli, mais ça permet d´effacer l´ancienne frame :-) )

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment