Aller au menu - Aller au contenu
Inscris-toi au e-camp "Héberge ton jeu Facebook sur Azure" de Microsoft vendredi 25 mai à 13h30 !

Probleme avec la sdl

Pour accéder à cette section
Connectez-vous !
connexion_rpx
Page 1 
Auteur Message
1 visiteur sur ce sujet (1 Anonyme)
Page 1 
Hors ligne dark-lord # Posté le 20/03/2006 à 10:35:36
Avatar

Ville : Metz
Pays : France métropolitaine

J'ai un petit probleme avec la sdl mais je c'est pas pourquoi

Code : C
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

void pause();

int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL;
    SDL_Surface *lol[3] = {NULL};
    SDL_Rect position;
    Uint32 couleur[3] = {0};
    int i = 0;
   
    SDL_Init(SDL_INIT_VIDEO);
   
    ecran = SDL_SetVideoMode(512,512,32,SDL_HWSURFACE | SDL_DOUBLEBUF);
    for(i =0; i<= 2; i++);
          {
          lol[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, (i+1)*100, (1+i)*100 ,32,0,0,0,0);
          if(lol[i] == NULL)
            {
            fprintf(stderr,"probleme de création des surfaces : \n %s", SDL_GetError);
            }
          }
       
    couleur[0] = SDL_MapRGB(ecran->format , 255 , 0 , 0);
    couleur[1] = SDL_MapRGB(ecran->format , 0 , 0 , 255);
    couleur[2] = SDL_MapRGB(ecran->format , 0 , 255 , 0);
   
    for(i = 0; i<=2; i++)
      {
      SDL_FillRect(lol[i], NULL, couleur[i]);
      position.x = (512 - (1+i)*100) / 2;
      position.y = (512 - (1+i)*100) / 2;
   
      SDL_BlitSurface(lol[i], NULL, ecran, &position );
      }
   
    pause();
    for(i = 0;i<=2;i++)
        SDL_FreeSurface(lol[i]);
       
    SDL_Quit();

    return EXIT_SUCCESS;
}

void pause()
{
    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}




En fait le code devrait ouvrir une fenetre, dans cette fenetre il doit y avoir 3 carre un sur l'autre et de couleur différente mais quand je compile le code ben il se lance mais se referme tout de sutie et un fichier stderr est créer avec ecrit ca dedans

Code : Autre
Fatal signal: Segmentation Fault (SDL Parachute Deployed)
Publicité # Posté le 20/03/2006 à 10:35:36

Hors ligne Natim # Posté le 20/03/2006 à 11:22:36
Apprendre à coder c'est coder
Avatar
Groupe : Anciens
Flux RSS

Ville : Belfort
Pays : France métropolitaine

après ton premier for, il y a un ; donc il ne fait pas la boucle for et tu sors de ton tableau !

Code : C
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

void pause();

int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL;
    SDL_Surface *lol[3] = {NULL};
    SDL_Rect position;
    Uint32 couleur[3] = {0};
    int i = 0;
   
    SDL_Init(SDL_INIT_VIDEO);
   
    ecran = SDL_SetVideoMode(512,512,32,SDL_HWSURFACE | SDL_DOUBLEBUF);

    for(i =0; i<= 2; i++)
          {
          lol[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, (i+1)*100, (1+i)*100 ,32,0,0,0,0);
          if(lol[i] == NULL)
            {
            fprintf(stderr,"probleme de création des surfaces : \n %s", SDL_GetError);
            }
          }
       
    couleur[0] = SDL_MapRGB(ecran->format , 255 , 0 , 0);
    couleur[1] = SDL_MapRGB(ecran->format , 0 , 0 , 255);
    couleur[2] = SDL_MapRGB(ecran->format , 0 , 255 , 0);
   
    for(i = 0; i<=2; i++)
      {
      SDL_FillRect(lol[i], NULL, couleur[i]);
      // RAJOUT POUR VOIR LES 3 CARRES
      SDL_SetAlpha(lol[i], SDL_SRCALPHA, 128);
      position.x = (512 - (1+i)*100) / 2;
      position.y = (512 - (1+i)*100) / 2;
   
      SDL_BlitSurface(lol[i], NULL, ecran, &position );
      }
   
    pause();
    for(i = 0;i<=2;i++)
        SDL_FreeSurface(lol[i]);
       
    SDL_Quit();

    return EXIT_SUCCESS;
}

void pause()
{
    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}
Édité le 20/03/2006 à 11:26:24 par Natim
 
Hors ligne fock # Posté le 20/03/2006 à 12:14:47
Avatar

Ville : Gerzat
Pays : France métropolitaine

bonjour tout le monde

plutôt que de créer un nouveau topic je poste sur celui là.

voilà mon code est à peu près( parce que je l'ai fait avant et modifié selon celui de mat :p ) le même que m@teo21 mais il y a une erreur. quand je compile il le mets 0 errors , 0 warnings et process termined wirh statut 1 .Une fenetre s'ouvre mais se referme tout de suite.

Merci à ceux qui peuvent m'aider.
Code : C
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

void pause();

int main(int argc, char *argv[])
{
    SDL_Surface *ecran = NULL , *ligne[256] = {NULL};
    SDL_Rect position_degrade;

    int i;

    SDL_Init(SDL_INIT_VIDEO);

    ecran = SDL_SetVideoMode(400,256,32,SDL_HWSURFACE);



    for( i = 0 ; i < 255;i++)
    {
            ligne[i] =  SDL_CreateRGBSurface(SDL_HWSURFACE, 400 , 1 , 32 , 0, 0, 0, 0);
    }

    SDL_WM_SetCaption("mon dégradé",NULL);

    SDL_FillRect(ecran , NULL ,SDL_MapRGB(ecran->format, 0, 0, 0));

    for(i = 0; i <= 255;i++)
    {
            position_degrade.x = 0;
            position_degrade.y = i;

            SDL_FillRect(ligne[i],NULL,SDL_MapRGB(ecran->format,i,i,i));

            SDL_BlitSurface(ligne[i] , NULL , ecran ,&position_degrade);
    }


    pause();

    for(i = 0 ; i < 255 ; i++)
    {
        SDL_FreeSurface(ligne[i]);
    }
   SDL_Quit();

    return EXIT_SUCCESS;
}

void pause()
{
    int continuer = 1;
    SDL_Event event;

    while (continuer)
    {
        SDL_WaitEvent(&event);
        switch(event.type)
        {
            case SDL_QUIT:
                continuer = 0;
        }
    }
}
Édité le 20/03/2006 à 12:15:50 par fock
Hors ligne Natim # Posté le 20/03/2006 à 15:26:53
Apprendre à coder c'est coder
Avatar
Groupe : Anciens
Flux RSS

Ville : Belfort
Pays : France métropolitaine

Voici ton code corrigé :
Code : C
#include <stdlib.h>
#include <stdio.h>
#include <SDL/SDL.h>

void pause();

int main(int argc, char *argv[])
{
  SDL_Surface *ecran = NULL , *ligne[256] = {NULL};
  SDL_Rect position_degrade;
 
  int i;
 
  SDL_Init(SDL_INIT_VIDEO);
 
  ecran = SDL_SetVideoMode(400,256,32,SDL_HWSURFACE);

  for( i = 0 ; i <= 255;i++)
    {
      ligne[i] =  SDL_CreateRGBSurface(SDL_HWSURFACE, 400 , 1 , 32 , 0, 0, 0, 0);
    }
 
  SDL_WM_SetCaption("mon dégradé",NULL);
 
  SDL_FillRect(ecran , NULL ,SDL_MapRGB(ecran->format, 0, 0, 0));
 
  for(i = 0; i <= 255;i++)
    {
      position_degrade.x = 0;
      position_degrade.y = i;
     
      SDL_FillRect(ligne[i],NULL,SDL_MapRGB(ecran->format,i,i,i));
     
      SDL_BlitSurface(ligne[i] , NULL , ecran ,&position_degrade);
    }
 
 
  pause(ligne);
 
  for(i = 0 ; i < 255 ; i++)
    {
      SDL_FreeSurface(ligne[i]);
    }
  SDL_Quit();
 
  return EXIT_SUCCESS;
}

void pause()
{
  int continuer = 1;
  SDL_Event event;
 
  while (continuer)
    {
      SDL_WaitEvent(&event);
      switch(event.type)
        {
        case SDL_QUIT:
          continuer = 0;
        }

    }
}


Il manquait un = dans la première boucle for !

Sachez que les SegFault vienne d'un depassement de tableau !
Donc regarder vos tableaux ;)
 
Hors ligne fock # Posté le 20/03/2006 à 16:00:23
Avatar

Ville : Gerzat
Pays : France métropolitaine

merci beaucoup natim .
Hors ligne gabi # Posté le 20/03/2006 à 17:39:18
Avatar

Au passage, si vous voulez récupérez des détails plus précis sur les erreurs qui se sont produites utilisez la fonction SDL_GetError() comme suit:

printf("%s",SDL_GetError() );

ça va créer un fichier stdout.exe dans le répertoire de votre projet, et dedans de plus amples détails sur les bugs ^^.Mettez en partout.
Hors ligne fock # Posté le 20/03/2006 à 19:15:27
Avatar

Ville : Gerzat
Pays : France métropolitaine

ouais j'avais remarqué ^^ .

Retour au forum "Langage C" ou à la liste des forums

Pour accéder à cette section
Connectez-vous !
connexion_rpx