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

SDL Gros bug

pouky10
pouky10
Niveau 6
28 juillet 2005 à 01:48:14

Salut je travaille sur mon 2e pong et j´utilise SDL_TTF pour afficher les score , pour utiliser sdl_ttf je dois utiliser sdl_color,mais quand je rajoute:

color.r=SDL_MapRGB(screen->format,0,0,0);
color.g=SDL_MapRGB(screen->format,0,255,0);
color.b= SDL_MapRGB(screen->format,0,0,0);

Ce qui fonctionnait à mon premier pong le programme m´envoit le rapport d´erreur de microsoft,comment cela et comment faire pour le contourner ou régler le problème. Voici mon code source:

  1. include < iostream> / /inclue les librairie
  2. include < stdlib.h>
  3. include < SDL\SDL.h>
  4. include < SDL\SDL_ttf.h>

SDL_Surface *screen,sscore,bestscore; / /les écran sur lequel on travaille
SDL_Rect rscore; / /rectangle du score
SDL_Event event; / /gère les événement
TTF_Font *font, *fon; / /règle la police du texte
SDL_Color color;

class rect / /s´occupe de la balle
{
public:
SDL_Rect des, dep;
rect();
};
rect::rect() / /s´occupe de la balle
{
dep.x=1;
dep.y=1;
dep.w=18;
dep.h=18;
des.x=370;
des.y=450;
des.h=18;
des.w=18;
}

void Init_SDL() / / inittie la SDL, librairie fesant l´affichage
{
if( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_TIMER)<0)
exit(1);
atexit(SDL_Quit);

screen = SDL_SetVideoMode(760,500,32, SDL_HWSURFACE|SDL_DOUBLEBUF ) ;
if( screen ==NULL)
{
printf("Can´t set video mode");
exit(2);
}
if ( TTF_Init() < 0) / /initie SDL ttf permettant d´écrire
{
fprintf(stderr, " Impossible d´initialiser SDL_TTF: %s\n",SDL_GetError());
}
font= TTF_OpenFont("./elephant.ttf",15);
font= TTF_OpenFont("./elephant.ttf",20);
}

int main(int argc, char *argv[])// Le programme commence ici
{
rscore.x = 660;
rscore.y=2;
rscore.h= 15;
rscore.w=100;

color.r=SDL_MapRGB(screen->format,0,0,0);
color.g=SDL_MapRGB(screen->format,0,255,0);
color.b= SDL_MapRGB(screen->format,0,0,0);

bool done=true;

int texte;

/ /surface de la balle
SDL_Surface *image= SDL_CreateRGBSurface(SDL_HWSURFACE,800,600, 32,0,0,0,0);
rect balle;
image=SDL_LoadBMP("balle.bmp");
int x=2,y=-2, score=0;

int vitesse=0,vitesse1=1; / /sert à régler la vitesse de la balle

Init_SDL();

SDL_Rect bar[2]; / /sont les bar qui se déplace
bar[0].x = 340;
bar[0].y = 468;
bar[0].h = 10;
bar[0].w = 100;

bar[1].x = 340;
bar[1].y = 22;
bar[1].h = 10;
bar[1].w = 100;

int time, nextime,nom; / /temps pour le changement de couleur
nextime = SDL_GetTicks()+ 300;

while(done)
{

time = SDL_GetTicks(); / /prend l´heure
if(time > nextime) / /change la couleur de la balle
{

if(nom > 3)
nom=0;
else
nom++;

balle.dep.x= nom*18 +1;
nextime= time +300;//change la couleur de la balle
}

if(balle.des.x>18 && balle.des.x < 660) / /fait bouger la bar du haut
bar[1].x= balle.des.x-9;

if(balle.des.x > 742 || balle.des.x < 1) / /fait rebondir la balle
x=-x;
if(balle.des.y < 33-y)
y=-y;
if(balle.des.y > 450)
if(balle.des.x > bar[0].x - 17 && balle.des.x < bar[0].x +117)
{
y=-y;
vitesse++;
score+=10;
if(balle.des.x < bar[0].x +50)
{if(x>0) x=-x;}
else
if(x<0) x=-x;
}

if(balle.des.y > 500) / /quitte si la balle sort par le bas
return 0;

if(vitesse/2 > vitesse1)
{
vitesse1++;
if(y<0) y--;
else y++;
}

balle.des.x += x; / /fait bouger la balle
balle.des.y += y;

SDL_PollEvent(&);
if(event.type== SDL_QUIT) done=false;
if(event.type == SDL_KEYDOWN)
{
switch(event.key.keysym.sym)
{
case SDLK_RIGHT:
if(bar[0].x < 660)
bar[0].x += 5;
break;
case SDLK_LEFT:
if(bar[0].x > 5)
bar[0].x -= 5;
break;
case SDLK_ESCAPE: done =false;
break;
}
}
SDL_FillRect(screen,NULL,0);
SDL_FillRect(screen, &[0],SDL_MapRGB(screen->format,255,255,255));
SDL_FillRect(screen, &[1],SDL_MapRGB(screen->format,255,255,255));
SDL_BlitSurface(image,&.dep,screen, &.des);
SDL_Flip(screen);
}

return 0;
}

Musashi001
Musashi001
Niveau 10
28 juillet 2005 à 03:03:14

Bon j´ai pas lu ( pas tres agréable a lire, d´autant qu´il est 3h du mat et que mes yeux sont en lambeaux)

Donc l mieux c´est que tu poste sur le wall de jv:
http://walljv.free.fr/index.php?to=ajout

Mais sinon, j´ai vu vite fait comme ça, mon conseil ça serait de faire plus de classe, de leur attribuer des fonctions et données membre et ainsi rétrécir la fonction main ( quel bordel la dedans) :)

voila!

pouky10
pouky10
Niveau 6
28 juillet 2005 à 03:27:45

http://walljv.free.fr/index.php?to=view&id=98 pas très bonne heure pour moi de poster, je suis québecois, il est seulement 9h.

JeanYvesYves
JeanYvesYves
Niveau 10
28 juillet 2005 à 09:20:18

controle tes valeurs de retour !
une telle erreur, c´est un " segment fault"
tu as surement une fonction qui t´a renvoyé NULL et tu essaies de manipuler ce code de retour !

JeanYvesYves
JeanYvesYves
Niveau 10
28 juillet 2005 à 09:20:43

controle tes valeurs de retour !
une telle erreur, c´est un " segment fault"
tu as surement une fonction qui t´a renvoyé NULL et tu essaies de manipuler ce code de retour !

Vengeur41
Vengeur41
Niveau 10
28 juillet 2005 à 13:45:20

Tu peux très bien te passer de TTF si tu veux afficher des scores...

dynoplasmma
dynoplasmma
Niveau 9
28 juillet 2005 à 13:55:35

Pour mon pong, pour les scores j´utilise des images, et puis voila :)
Pas de sdl ttf

godrik
godrik
Niveau 30
28 juillet 2005 à 14:37:00

proposez une autre méthode ne résoud pas le problème.
La cause de ce genre d´erreur peut parfois etre extérieur au lieu ou elle est percue!

pouky10
pouky10
Niveau 6
28 juillet 2005 à 15:51:40

J´aimerais bien utiliser SDL_TTF(surtout que je suis nul ave paint, en passant quel logiciel pourrais-je utiliser pour faire des lettre en dessin qui est gratuit). comment cela SDL_MapRGB renvoie null, elle ne devrait pourtant pas si je met SDL_MapRGB(screen->format,0,0,0), ca pourrais(car ca renvoie 0) peux etre mais meme avec SDL_MapRGB(screen->format,0,255,0)(renvoie 224) avec essaie sur monautre pong. Que dois je faire et si je teste une fonction qui renvoie null ne va-t-elle pas planté avant le test?

Ps: jyy c´est bien un segment fault

godrik
godrik
Niveau 30
28 juillet 2005 à 16:02:38

quand tu appele color.r=SDL_MapRGB(screen->format,0,0,0);
color.g=SDL_MapRGB(screen->format,0,255,0);
color.b= SDL_MapRGB(screen->format,0,0,0);
screen n´est pas initialisé

pouky10
pouky10
Niveau 6
28 juillet 2005 à 16:11:15

Mille merci , c´est ça.

pouky10
pouky10
Niveau 6
28 juillet 2005 à 16:56:35

J´ai un autre problème allez voir http://walljv.free.fr/index.php?to=view&id=99

godrik
godrik
Niveau 30
28 juillet 2005 à 17:02:29

sscore est un SDL_Surface*
tu fais erreur:
SDL_Surface *screen,sscore,bestscore;
le seul pointeur de SDL_Surface est screen
je pense que tu voulais ecrire
SDL_Surface *screen, *sscore, *bestscore;

pouky10
pouky10
Niveau 6
28 juillet 2005 à 17:31:22

merci

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