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

Mon programme sdl/c++ ne se lance pas

N_Cortex
N_Cortex
Niveau 7
03 septembre 2005 à 15:50:15

Si je met juste la balle a rebondir, mon programme ne raaaaaaame paaaaaaaas.

Je crois que je vais peter un cable... Serait-ce mest struct et mes variables qui beug ?

Vengeur41
Vengeur41
Niveau 10
03 septembre 2005 à 15:58:20

Qu´est ce que tes compétences ont à voir ?
Ben tu oublie des mots clefs, tu mets trop d´arguments aux fonctions et à la vue de ton code en général...

Enfin bon on peut etre distrait, coder comme un porc mais avoir de bonnes compétences quand meme...

Pour ton problème je crois que j´ai la solution mais je répondrai plus tard, je dois y aller là...

N_Cortex
N_Cortex
Niveau 7
03 septembre 2005 à 16:10:28

Ok, merci quand meme.

Par contre, par rapport a coder comme un porc, j´ai toujours débuter un langage comme ça... (allez voir sur le forum writing-pad, j´ai un sujet de 3 pages a cause d´un problème trop con... :p

N_Cortex
N_Cortex
Niveau 7
03 septembre 2005 à 19:23:28

Bon, je up le topic pour vengeur.

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 11:19:57

Pitié, Vengeur, donne moi la solutioon a mon problème !! !

Vengeur41
Vengeur41
Niveau 10
04 septembre 2005 à 12:44:06

SW_Surface à la place de HW_Surface ?
Ram au lieu de VRAM ?
Bidouille la dedans...

J´aimerais connaître ta configuration j´ai vu plein de fois des gens qui se plaignaient que la SDL rammait (d´ailleurs quoi q´on dise elle est gourmande)... Faut optimiser un max...
Je me rappelle de mon premier jeu : un petit mario avec 5 sprites à l´écran qui rammait comme pas 2 sur mon vieux P3 à 700mhz et maintenant que j´optimise, mon LeZardWare (qui a souvent une 30 aine de sprites à l´écran) tourne tranquillou...

Optimizasheune !

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 13:56:06

A la base, je suis parti du petit programme de JYY qui faisait rebondir un balle a l´écran, puis j´ai rajouté plein de trucs.

Mon pc est un pentium II 350mhz 128 mo de ram, alors je pense qu´il va falloir optimiser un max.

Mais comment fonctionne l´optimisation ?

Vengeur41
Vengeur41
Niveau 10
04 septembre 2005 à 14:34:29

Ah oui d´accord jvois le truc...
T´as pas grand chose à faire.

Pour optimiser ton code ben faut au maximum macher le travail de l´ordinateur (par exemple au lieu de marquer direct dans ton code cos(3) ecrit directement le résultat), fait lui blitter des images plus petites enfin bref, t´as du travail...

Surtout avec un pc pareil...

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 14:36:12

Enfin bon, mon pc arrive a faire tourner starcraft sans lag, il devrait bien réussir a faire tourner un pauv programme tout pourris !!

Vengeur41
Vengeur41
Niveau 10
04 septembre 2005 à 14:38:05

Il y´a une grosse différence : la SDL est software, elle utilise directement le cpu et la ram.
Starcraft utilise des librairies hardware qui laissent le gros du calcul au gpu de la carte graphique...

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 14:47:11

okokok....

Par contre, je vois pas ou j´ai mit swsurface et ram... je n´ai mit que des vram et aucun swsurface ou hwsurface !!

Mon code :

  1. include <SDL/SDL.h>

SDL_Surface* screen;
SDL_Event event;
char key[400];
int xsouris=0,ysouris=0,xrelsouris=0,yrelsouris=0;

//toutes les structures des objets
struct player
{
int score;
int vie;
};

struct balle
{
int x;
int y;
bool in;
};

struct vaisseau
{
int x;
int y;
bool in;
int anim;
};

struct briques
{
int x;
int y;
bool in;
};

struct life
{
int x;
int y;
bool in;
};

//initialisation de sdl + updates events ect (merci JYY ^^)
void init_SDL()
{
SDL_Init(SDL_INIT_VIDEO);
screen = SDL_SetVideoMode(800, 600, 32,SDL_HWSURFACE|SDL_DOUBLEBUF|SDL_FULLSCREEN);
SDL_ShowCursor(0);
}

void UpdateEvents()
{
SDL_Event event;
while(SDL_PollEvent(&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
key[event.key.keysym.sym]=1;
break;
case SDL_KEYUP:
key[event.key.keysym.sym]=0;
break;
case SDL_MOUSEMOTION:
xsouris=event.motion.x;
ysouris=event.motion.y;
xrelsouris=event.motion.xrel;
yrelsouris=event.motion.yrel;
break;
}
}
}

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;
}

void Blit(SDL_Surface* source, SDL_Surface* dest, int X, int Y)
{
SDL_Rect R;
R.x = X;
R.y = Y;
R.w=R.h=0;
SDL_BlitSurface(source,NULL,dest,&R);
}

SDL_Surface* LoadBMP(char* fichier,int vram=1)
{
SDL_Surface* f = SDL_LoadBMP(fichier);
SDL_Surface* r=NULL;
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,&R);
SDL_FreeSurface(f);
return r;
}

int main(int argc ,char **argv)
{
//déclaration des variables + structures
struct player joueur;
joueur.vie = 3;
int s=1, pos_x=35, pos_y=0, i=0, start=0;
int sx4=0,sy4=0;
init_SDL();
struct balle ball;
ball.x = 100;
ball.y = 300;
ball.in = true;
struct vaisseau plaque;
plaque.x = 200;
plaque.y = 510;
plaque.in = true;
struct briques briks[250];
for (i=0; i<231; i++)
{
briks[i].x = pos_x;
briks[i].y = pos_y;
briks[i].in = true;
pos_x = pos_x + 35;
if (pos_x >= 765) {pos_y += 17;pos_x = 35;}
}
struct life vie[3];
for (i=0;i<=3;i++)
{
pos_x = 620;
vie[i].x = pos_x;
vie[i].y = 20;
vie[i].in = true;
pos_x += 20;
}

//création des surfaces
SDL_Surface* firstscreen;
SDL_Surface* balle;
SDL_Surface* img_plaque;
SDL_Surface* img_plaqued;
SDL_Surface* img_plaqueg;
SDL_Surface* brique;
SDL_Surface* vie1;
SDL_Surface* vie2;
SDL_Surface* vie3;
int fini=0;

//creation des objets + transparence
firstscreen=LoadBMP("font.bmp");
balle=LoadBMP("boule_de_feu4.bmp");
img_plaque=LoadBMP("plaque.bmp");
img_plaqued=LoadBMP("plaque-d.bmp");
img_plaqueg=LoadBMP("plaque-g.bmp");
brique=LoadBMP("brique_bleu.bmp");
vie1=LoadBMP("vie.bmp");
vie2=LoadBMP("vie.bmp");
vie3=LoadBMP("vie.bmp");
SDL_SetColorKey(balle,SDL_SRCCOLORKEY ,SDL_MapRGBA(balle->format,255,0,255,0));
SDL_SetColorKey(img_plaqued,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_plaque->format,255,0,255,0));
SDL_SetColorKey(img_plaqueg,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_plaque->format,255,0,255,0));
SDL_SetColorKey(img_plaque,SDL_SRCCOLORKEY ,SDL_MapRGBA(img_plaque->format,255,0,255,0));
SDL_SetColorKey(brique,SDL_SRCCOLORKEY ,SDL_MapRGBA(brique->format,255,0,255,0));
SDL_SetColorKey(vie1,SDL_SRCCOLORKEY ,SDL_MapRGBA(vie1->format,255,0,255,0));
SDL_SetColorKey(vie2,SDL_SRCCOLORKEY ,SDL_MapRGBA(vie2->format,255,0,255,0));
SDL_SetColorKey(vie3,SDL_SRCCOLORKEY ,SDL_MapRGBA(vie3->format,255,0,255,0));

while(1) //boucle principale
{

UpdateEvents(); //recherche d´events, et quitte si echap ou lance la balle si return
if (key[SDLK_RETURN] && start == 0) {sy4 = 1; sx4 = 1; start = 1;}
if (key[SDLK_ESCAPE]) break;

//animation du vaisseau
if(xrelsouris > 0) plaque.anim = 0;
if (xrelsouris == 0) plaque.anim = 1;
if(xrelsouris < 0) plaque.anim = 2;

//mouvements de la balle
ball.x+=9*sx4;
ball.y+=9*sy4;

//rebonds de la balle
if (ball.x<0) sx4=1;
if (ball.y<0) sy4=1;
if (ball.x>785) sx4=-1;
if (ball.y + 16 > plaque.y && ball.x > plaque.x - 100 && ball.x < ball.x + 150 ) sy4=-1;
if (ball.y > 600) ball.in=false;
//destruction des briques
for (i=0; i < 231; i++)
{
if (ball.y >= briks[i].y && ball.y <= briks[i].y + 14 && ball.x >= briks[i].x && ball.x <= briks[i].x + 35 ) {briks[i].in = false; sy4 = -(sy4); joueur.score += 100; } //rebond bas
if (ball.y + 16 >= briks[i].y && ball.y + 16 <= briks[i].y + 14 && ball.x >= briks[i].x && ball.x <= briks[i].x + 35 ) {briks[i].in = false; sy4 = -(sy4); joueur.score += 100; } //rebond haut
if (ball.x >= briks[i].x && ball.x <= briks[i].x + 33 && ball.y >= briks[i].y && ball.y <= briks[i].y + 17 ) {briks[i].in = false; sx4 = -(sx4); joueur.score += 100; } //rebond gauche
if (ball.x + 15 >= briks[i].x && ball.x + 15 <= briks[i].x + 35 && ball.y >= briks[i].y && ball.y <= briks[i].y + 17 ) {briks[i].in = false; sx4 = -(sx4); joueur.score += 100; } //rebond droite
}

// mouvements du vaisseau
plaque.x = xsouris - 100;
if (plaque.x < 100) xsouris = 100;
if (plaque.x > 700) xsouris = 700;

//restart si la balle meurt
if (ball.in == false)
{
joueur.vie--;
ball.x = 100;
ball.y = 300;
ball.in = true;
plaque.x = 200;
plaque.y = 560;
if (joueur.vie == 2)vie[1].in = false;
if (joueur.vie == 1)vie[2].in = false;
if (joueur.vie == 0)vie[3].in = false;
start = 0;
}
if (joueur.vie == -1) break; // quitte si le joueur n´a plus de vies
// génération a l´écran
SDL_BlitSurface(firstscreen,NULL,screen,NULL);
if (ball.in == true)Blit(balle,screen,ball.x, ball.y);
if (plaque.in == true && plaque.anim == 1)Blit(img_plaque,screen,plaque.x,plaque.y);
if (plaque.in == true && plaque.anim == 0)Blit(img_plaqueg,screen,plaque.x,plaque.y);
if (plaque.in == true && plaque.anim == 2)Blit(img_plaqued,screen,plaque.x,plaque.y);
if (ball.y < 300)
{
for (i=0;i<231;i++)
{
if(briks[i].in == true)Blit(brique,screen,briks[i].x,briks[i].y);
}
if (vie[1].in == true)Blit(vie1,screen,vie[1].x,vie[1].y);
if (vie[2].in == true)Blit(vie2,screen,vie[2].x,vie[2].y);
if (vie[3].in == true)Blit(vie3,screen,vie[3].x,vie[3].y);
}
SDL_Flip(screen);
}
SDL_Quit();
SDL_ShowCursor(1);
return 0;
}

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 16:26:48

Bon j´ai décidé de recommencer le programme quasiment a zéro, parce que la, c´est trop la galère.

Donc j´ai décidé de ranger mes images dans des dossiers, mais

firstscreen=LoadBMP("backgrounds\font_etoiles.bmp"
);

ne fonctionne pas...
Alors il vaut mieux faire ça comment ?

Vengeur41
Vengeur41
Niveau 10
04 septembre 2005 à 16:56:21

/ à la place de \

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 16:57:12

ok merci

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 17:41:47

ALELUIA !! !!!!!!!

J´ai trouvé d´ou vient le lag !! !

C´est mon image qui est trop grosse !!

Alors, j´aimerais bien savoir, comment optimiser une image bmp ?

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 18:18:53

Y a t il moyen d´utiliser des images autre que des bmp ?

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 18:40:17

J´ai trouvé la libraire sdl_image qui permet de faire ça, mais c´est quoi les liens qu´il faut mettr e ? Je trouve pas sur le site.

Vengeur41
Vengeur41
Niveau 10
04 septembre 2005 à 18:42:07

Une image bmp une fois chargé prendra autant de mémoire qu´une png... Une solution est de découper l´image en plusieurs petites images...

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 18:42:45

Je vais essayer ça.

N_Cortex
N_Cortex
Niveau 7
04 septembre 2005 à 18:50:27

YAHOOOOOOOOOH !! ! CA NE RAME PLUS !! !

MERCI VENGEUR !!

TU ES MON DIEU !! !

MAINTENANT JE TE VOUVOIRAI !!

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