IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Comment intégrer SDL dans un prog C


Sujet :

SDL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Comment intégrer SDL dans un prog C
    Bonjour,

    J'ai developpé un programme en C avec un interface texte via la console.
    Maintenant j'aimerai pouvoir ameliorer cet interface en utilisant la SDL.

    Le probleme est que j'arrive a obtenir quelque chose lorsque je developpe une interface sans aucun lien avec mon prog mais je ne sais absolument pas comment l'integrer a present...

    Merci d'avance!

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu utilises quel compilo / IDE ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Je travaille sous Linux avec GCC.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu as jeté un oeil aux tutoriels SDL que nous proposons ? A la FAQ ?

    En fait qu'est-ce qui te pose problème exactement ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Oui j'ai regardé quelques-un des tutos et j'ai reussi a obtenir ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
     
    #include <stdlib.h>
    #include <stdio.h>
    #include <SDL/SDL.h>
     
    void pause();
     
    int main()
    {
    int i,j;
    int abscisse=0;
    int ordonnee=0;
    int taille_mer=40;
     
     
     
    SDL_Surface *ecran = NULL;
    SDL_Surface *rectangle[taille_mer*taille_mer];
     
    SDL_Rect position;
     
    SDL_Init(SDL_INIT_VIDEO);
     
    ecran = SDL_SetVideoMode(1024, 700, 32, SDL_HWSURFACE);
     
    for(i=0;i<160;i++)
    	{
    	rectangle[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 16, 16, 32, 0, 0, 0, 0); // Allocation de la surface
    	}
     
    SDL_WM_SetCaption("Vive la pêche !", NULL);
     
    SDL_FillRect(ecran, NULL, SDL_MapRGB(ecran->format, 157, 199, 247));
     
     
    for(i=0;i<taille_mer;i++)
    	{
    	for(j=0;j<taille_mer;j++)
    		{
    		position.x = 20 + abscisse; // Les coordonnées de la surface seront (0, 0)
    		position.y = 30 + ordonnee;
    		SDL_FillRect(rectangle[i], NULL, SDL_MapRGB(ecran->format, i*j, i*j, i*j)); // Remplissage de la surface avec du blanc
    		SDL_BlitSurface(rectangle[i], NULL, ecran, &position); // Collage de la surface sur l'écran
    		abscisse=abscisse+16;
    		}
    	abscisse=0;
    	ordonnee=ordonnee+16;
    	}
     
     
     
     
     
    SDL_Flip(ecran); // Mise à jour de l'écran
     
    pause();
     
    for(i=0;i<160;i++)
    	{
    	SDL_FreeSurface(rectangle[i]); // Libération de la surface
    	}
     
    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;
            }
        }
    }

    Maintenant j'aimerai associer a chaque carré que j'ai crée une couleur en fonction de variables presentes dans mon prog.

    Le probleme est que je ne sais pas ou placé les differentes parties du code comme les declarations des variables, les initialisations etc...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Je pense etre arrivé a quelque chose tant bien que mal mais un probleme persiste :
    le programme compile mais me renvoie une erreur du type " Fatal signal: Segmentation Fault (SDL Parachute Deployed) "

    L'erreur semble etre provoquée par une ligne du type :

    SDL_FillRect(rectangle[k], NULL, SDL_MapRGB(ecran->format, 157, 199, 247));

    Auriez vous une idée de la cause (peut etre frequente) de ce type d'erreur?

  7. #7
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Typiquement c'est le déréférencement d'un pointeur qui part n'importe où. Ca peut venir d'une erreur de calcul sur un pointeur, d'un pointeur à NULL ou encore d'un accès après un delete.

    Ici il faudrait surveiller la valeur de k et que "rectangle[k]" est bien alloué.
    (Je présume que "SDL_MapRGB(ecran->format, 157, 199, 247)" est sure.)

  8. #8
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Bonjour,

    Il faut ajouter des tests pour chacune de ces fonctions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SDL_Init(SDL_INIT_VIDEO);
     
    ecran = SDL_SetVideoMode(1024, 700, 32, SDL_HWSURFACE);
     
    rectangle[i] = SDL_CreateRGBSurface(SDL_HWSURFACE, 16, 16, 32, 0, 0, 0, 0); // Allocation de la surface
    En plus, ta facon de créer ta surface est peu commune, utilise les champs de la structure ecran pour avoir le même format. Regarde dans ce forum, on en a déjà parlé.

    Ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SDL_Flip(ecran); // Mise à jour de l'écran
    on ne fait pas de flip, t'es pas en double buffer...

    Jc

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Il faut que je rajoute les tests pour verifier si ca c'est bien deroulé c'est bien ca?

    Par contre pour le Flip je ne peut que te corire sur parole, je vais faire confiance au pro

    Grrr maudits pointeurs !!!

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/11/2009, 17h17
  2. intégrer SDL dans Qt
    Par chabeka dans le forum SDL
    Réponses: 4
    Dernier message: 27/01/2009, 14h39
  3. Intégrer SDL dans Qt
    Par Fullmetal82 dans le forum Qt
    Réponses: 9
    Dernier message: 02/11/2008, 18h07
  4. Réponses: 2
    Dernier message: 16/06/2007, 15h33
  5. [CKEditor] Comment intégrer fckeditor dans ma page Web
    Par Kylen dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 22/12/2005, 19h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo