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

J´aide les personne en C/C++

Giga-Nova
Giga-Nova
Niveau 9
13 septembre 2004 à 19:37:55

j´ai trouvé pk ca foiré

  1. include < SDL/SDL.h>

SDL_Surface* screen;
SDL_Event event;

void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER);
screen = SDL_SetVideoMode(1024, 768, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}

SDL_Rect Rect(int x,int y,int w=0,int h=0)
{
SDL_Rect r;
r.x=x;
r.y=y;
r.w=w;
r.h=h;
return r;
}

SDL_Surface* LoadBMP(char* fichier,int vram=1)
{
SDL_Surface* f = SDL_LoadBMP(fichier);
SDL_Surface* r;
if ( vram)
r=SDL_CreateRGBSurface(SDL_HWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
if ( r==NULL) vram=0;
if ( !vram)
r=SDL_CreateRGBSurface(SDL_SWSURFACE, f->w, f->h, 32, 0, 0, 0, 0);
SDL_Rect R=Rect(0,0,f->w,f->h);
SDL_BlitSurface(f,NULL,r,&);
SDL_FreeSurface(f);
return r;
}

int main(int argc , char **argv)
{
int s=1;
int sx=1,sy=1;
SDL_Rect rect1;
SDL_Surface* firstscreen;
SDL_Surface* perso[4];

int fini=0;
init_SDL();

rect1.x = 0;
rect1.y = 0;

firstscreen=LoadBMP("map.bmp");
perso[0]=LoadBMP("homme1.bmp");
perso[1]=LoadBMP("homme2.bmp");
perso[2]=LoadBMP("homme3.bmp");
perso[3]=LoadBMP("homme4.bmp");

//SDL_SetColorKey(perso[4],SDL_SRCCOLORKEY , SDL_MapRGBA(perso[4]->format,255,0,255,0));
//SDL_SetAlpha(perso[4],SDL_SRCALPHA,128);

while(1)
{
if ( rect1.x<0) sx=1;
if ( rect1.y<0) sy=1;
if ( rect1.x>950) sx=-1;
if ( rect1.y>650) sy=-1;
SDL_BlitSurface(firstscreen,NULL,screen,NULL);

SDL_PollEvent(&);
if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
break;
if ( event.type == SDL_KEYDOWN)
{
if(event.key.keysym.sym == SDLK_RIGHT)
SDL_BlitSurface(perso[0],NULL,screen,&1);
if(event.key.keysym.sym == SDLK_UP)
SDL_BlitSurface(perso[1],NULL,screen,&1);
if(event.key.keysym.sym == SDLK_LEFT)
SDL_BlitSurface(perso[2],NULL,screen,&1);
if(event.key.keysym.sym == SDLK_DOWN)
SDL_BlitSurface(perso[3],NULL,screen,&1);
}

if ( rect1.x<0) sx=1;
if ( rect1.y<0) sy=1;
if ( rect1.x>950) sx=-1;
if ( rect1.y>650) sy=-1;
SDL_BlitSurface(firstscreen,NULL,screen,NULL);

SDL_BlitSurface(perso[rect1.x/20%4],NULL,screen,&
ect1);
SDL_Flip(screen);
}
SDL_ShowCursor(1);
SDL_Quit();
return 0;
}

/ /SDL_SetColorKey(perso[4],SDL_SRCCOLORKEY , SDL_MapRGBA(perso[4]->format,255,0,255,0));
//SDL_SetAlpha(perso[4],SDL_SRCALPHA,128);

c ca qui faisait foiré

Ptival
Ptival
Niveau 10
13 septembre 2004 à 19:54:31

Si tu pouvais éviter de poster tout ton code à chaque fois :lol:

C´est ça qui foirais, tu nous montre 100 lignes de codes, on va pas tout relire à chaque fois...

Giga-Nova
Giga-Nova
Niveau 9
13 septembre 2004 à 19:56:11

ton machin marche pas

Giga-Nova
Giga-Nova
Niveau 9
13 septembre 2004 à 19:59:39

if ( rect1.x<0) sx=1;
if ( rect1.y<0) sy=1;
if ( rect1.x>950) sx=-1;
if ( rect1.y>650) sy=-1;
SDL_BlitSurface(firstscreen,NULL,screen,NULL);

SDL_PollEvent(&);
if ( event.type == SDL_KEYDOWN && event.key.keysym.sym == SDLK_RETURN)
break;
if ( event.type == SDL_KEYDOWN)
{
if(event.key.keysym.sym == SDLK_RIGHT)rect1.x+=1;
SDL_BlitSurface(perso[0],NULL,screen,&1);
if(event.key.keysym.sym == SDLK_UP)rect1.y-=1;
SDL_BlitSurface(perso[1],NULL,screen,&1);
if(event.key.keysym.sym == SDLK_LEFT)rect1.x-=1;
SDL_BlitSurface(perso[2],NULL,screen,&1);
if(event.key.keysym.sym == SDLK_DOWN)rect1.y+=1;
SDL_BlitSurface(perso[3],NULL,screen,&1);

on voit une image de personnage

et on voit les autre en dessous ( on voit left et up down right en dessous, c peut etre de ca qui me parlait tout a l´heur ? ??)

Giga-Nova
Giga-Nova
Niveau 9
13 septembre 2004 à 20:10:56

pas de rep

lalelale
lalelale
Niveau 5
13 septembre 2004 à 20:11:57

et pour ma question?

Giga-Nova
Giga-Nova
Niveau 9
13 septembre 2004 à 20:14:36

je sais pas

gollumkawder
gollumkawder
Niveau 10
13 septembre 2004 à 21:24:29

%s :d) format chaîne

Ptival
Ptival
Niveau 10
13 septembre 2004 à 21:53:06

Ton fond il est noir ou ya une image ?

Si il est noir, faut que tu refoutes du noir sur la surface avant de recoller le perso.

Si c´est une image en fond, faut reblitter l´image de fond avant de blitter le perso.

Dans le deux cas tu ne peux le faire qu´en partie ( blitter/remplir seulement le morceau de fond où est affiché le perso)

JeanYvesYves
JeanYvesYves
Niveau 10
13 septembre 2004 à 22:24:19

Le tout est de savoir si tu as bien chargé ton image ou si tu la blit hors de l´écran

fait afficher tes valeurs, faut débugguer un peu :)

Giga-Nova
Giga-Nova
Niveau 9
14 septembre 2004 à 12:26:04

j´ai mis un font blanc mais mon perso
défile dans les 4 sens ( haut bas droit gauche)
quand j´apuie soit sur droite ou gauche

Giga-Nova
Giga-Nova
Niveau 9
14 septembre 2004 à 18:46:39

:up:

Ruffi
Ruffi
Niveau 9
14 septembre 2004 à 18:53:43

Bon, je connais pas trop la SDL, mais d´apres le code que tu a mis plus haut, il y a des truc qui me gene :

if(event.key.keysym.sym == SDLK_RIGHT)rect1.x+=1;
SDL_BlitSurface(perso[0],NULL,screen,&1);

if(event.key.keysym.sym == SDLK_UP)
rect1.y-=1;
SDL_BlitSurface(perso[1],NULL,screen,&1);

if(event.key.keysym.sym == SDLK_LEFT)
rect1.x-=1;
SDL_BlitSurface(perso[2],NULL,screen,&1);

if(event.key.keysym.sym == SDLK_DOWN)
rect1.y+=1;
SDL_BlitSurface(perso[3],NULL,screen,&1);

=> probleme : tu blit l´image plusieures fois, et des fois avant de faire le deplacement

a mon avis faudrait que tu fasse comme sa :
if(event.key.keysym.sym == SDLK_RIGHT)
rect1.x+=1;
else if(event.key.keysym.sym == SDLK_UP)
rect1.y-=1;
else if(event.key.keysym.sym == SDLK_LEFT)
rect1.x-=1;
if(event.key.keysym.sym == SDLK_DOWN)
rect1.y+=1;
SDL_BlitSurface(perso[3],NULL,screen,&1);

( ou mieu, utilise un swtich)

Bon, je sais pas si c´est sa le probleme, mais sa devait en etre un

Ptival
Ptival
Niveau 10
14 septembre 2004 à 19:09:59

Le problème c´est que tu blittes les 4, tu as mal suivi les cours, si tu ne mets pas de { } après un if, seule la première instruction suivant le if est prise dans la condition. Il faut mettre :

if(event.key.keysym.sym == SDLK_RIGHT)
{
rect1.x+=1;
SDL_BlitSurface(perso[0],NULL,screen,&1);
}

if(event.key.keysym.sym == SDLK_UP)
{
rect1.y-=1;
SDL_BlitSurface(perso[1],NULL,screen,&1);
}

if(event.key.keysym.sym == SDLK_LEFT)
{
rect1.x-=1;
SDL_BlitSurface(perso[2],NULL,screen,&1);
}

if(event.key.keysym.sym == SDLK_DOWN)
{
rect1.y+=1;
SDL_BlitSurface(perso[3],NULL,screen,&1);
}

Giga-Nova
Giga-Nova
Niveau 9
14 septembre 2004 à 19:28:16

bon c toujour pas ca on voit l´image du perso dans le bon sens mais des que je fais droite ou gauche l´imge tourne dans un sens ou dans l´autre

Ptival
Ptival
Niveau 10
14 septembre 2004 à 19:46:03

Et c´est le mauvais sens ?

Tu peux pas réfléchir par toi-même un tout ptit peu ? C´est pas bien compliqué de comprendre qu´il faut échanger les images.

Giga-Nova
Giga-Nova
Niveau 9
14 septembre 2004 à 20:09:27

ben je veux bien reflechir moi meme mais c comme si on me donne une IE(interogation ecrite) sans avoir copié de lecon auparavent.

P.S si vous avez des tutos en FRANCAIS de SdL ou autre ils seraient les bienvenus.

Ptival
Ptival
Niveau 10
14 septembre 2004 à 20:27:05

http://perso.numericable.fr/~fvirtman/info/tuto/index.html

et

http://prografix.games-creators.org/

( Attention, Prografix est assez dur au début)

kgofpole
kgofpole
Niveau 10
14 septembre 2004 à 20:29:17

hello ,

Je cherche un tuto pour le c++ ou le pascal , dsl di cette question est posée tout le temps , un petit lien suffit :-)))

lag-it
lag-it
Niveau 10
14 septembre 2004 à 21:12:01

http://www.developpez.com

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