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 :

Sprite qui ne s'affiche pas


Sujet :

SDL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Sprite qui ne s'affiche pas
    Bonsoir,

    J'ai un probleme, voila je n'arrive pas a afficher une image dans ma fenetre, j'ai cree deux fonctions SDL dans mon fichier Game1.c,

    Game1.c :

    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
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
     
     
    int LoadContent (SDL_Surface* sf, char* str, SDL_Rect* pos, int x, int y)
    {
     
      (*pos).x = x;
      (*pos).y = y;
     
      sf = IMG_Load (str);
     
      return (0);
    }
     
     
    int Draw (SDL_Surface* sf1, SDL_Surface* sf2, SDL_Rect* pos)
    {
     
     
      SDL_BlitSurface (sf1, NULL, sf2, pos);
      SDL_Flip (sf2);
     
      SDL_FreeSurface (sf1);
     
      return (0);
    }
    J'appelle ces fonctions qui sont sensees me simplifier la vie dans la fonction main.c
    main.c :

    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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <SDL/SDL.h>
    #include <SDL/SDL_image.h>
    #include "Game1.h"
     
     
     
    int main (int argc, char* argv[])
    {
     
     
      // Textures                                                                                                                                          
     
      // surfaces de base (0)                                                                                                                              
      SDL_Surface *ecran;
      int continuer;
     
      //  surfaces (1)                                                                                                                                    \
                                                                                                                                                           
      SDL_Surface* mario;
     
      // position (2)                                                                                                                                     
     
      SDL_Rect* pos;
      SDL_Rect pos_mario;
     
      // evenement (3)                                                                                                                                     
     
      SDL_Event event;
     
      // init                                                                                                                                              
     
      ecran = NULL;
      mario = NULL;
      continuer = 1;
      pos = &pos_mario;
    SDL_Init (SDL_INIT_VIDEO);
     
      ecran = SDL_SetVideoMode (640, 480, 32, SDL_HWSURFACE);
     
      // boucle infini                                                                                                                                     
      while (continuer)
        {
          SDL_WaitEvent (&event);
          switch (event.type)
            {
            case SDL_QUIT:
              continuer = 0;
       default:;
              break;
            }
     
          SDL_FillRect (ecran, NULL, SDL_MapRGB (ecran -> format, 255, 255, 255));
          LoadContent (mario, "mario_bas.gif", pos, 0, 0);
          Draw (mario, ecran, pos);
     
    // FONCTION SDL EN COMMENTAIRE
    // mario = IMG_Load ("mario_bas.gif");                                    
          // SDL_BlitSurface (mario, NULL, ecran, &pos_mario);                      
          // SDL_Flip (ecran);                                                      
     
        }
     
     
     
      SDL_Quit ();
     
      return (EXIT_SUCCESS);
     
    }
    Le probleme est que rien ne s'affiche, pourtant lorsque j'appelle les fonctions de bases SDL (cf. FONCTION EN COMMENTAIRE) sans passer par mes fonctions a moi, a savoir, LoadContent et Draw alors la tout fonctionne. Pourquoi ? Je n'en ai aucune idee.

    Pourriez vous m'aider s'il vous plait.
    Merci beaucoup.


    Cordialement,
    helpmeplzzz

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2008
    Messages : 22
    Points : 22
    Points
    22
    Par défaut
    La variable mario que tu passe ligne 56 n'est pas la même que celle que tu récupère en tant que sf dans LoadContent (changement de contexte).

    Quand tu la modifie dans LoadContent, elle n'est pas modifiée dans les fonctions du dessus.

    La SDL a quelque protection ce qui fait que le programme ne segfault pas, mais l'adresse que tu passe a la fonction Draw vaut NULL.

    Pour que ca fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int LoadContent (SDL_Surface** sf, char* str, SDL_Rect* pos, int x, int y)
    {
     
      (*pos).x = x;   // Ici tu peut ecrire  " pos->x = x; " 
      (*pos).y = y;   // Pareil "pos->y = y;"
     
      *sf = IMG_Load (str); // Tu rajoute une *
      if (*sf == NULL) // Test pour verifier que IMG_Load a fonctionne
        printf("Loading failled\n");
     
      return (0);
    }
    L'appel de fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
          LoadContent (&mario, "mario_bas.gif", pos, 0, 0);
    Pour l'appel a draw, tu n'as pas besoin de changer car la variable n'est pas modifiée dans cette fonction.

    ======================

    2 petites remarques sur ton code:

    - Vérifie les retour de tes fonction (je parle de IMG_Load)
    - Ne met pas ta fonction LoadContent dans ta boucle, tu charge tes images en début de programe, tu libère ta mémoire a la fin. IMG_Load est une fonction qui consomme pas mal de ressources, a ne pas utiliser inutilement.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 12
    Points : 9
    Points
    9
    Par défaut @gheaeckkseqrz
    Merci beaucoup, j'ai maintenant un code fonctionnel tout en ayant compris enfin je lespere la suptilite avec les pointeur .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [HTML]Image qui ne s'affiche pas sous firefox...
    Par OrangeBud dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/10/2004, 13h42
  2. pages qui ne s'affichent pas
    Par luck dans le forum ASP
    Réponses: 4
    Dernier message: 19/07/2004, 11h35
  3. [Applet] BorderLayout qui ne s'affiche pas
    Par Invité(e) dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 29/04/2004, 11h39
  4. [debutant][Tomcat]Images qui ne s'affichent pas
    Par omega dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/04/2004, 09h44
  5. [MFC] Ces fenêtres qui ne s'affichent pas..
    Par Davide dans le forum MFC
    Réponses: 3
    Dernier message: 19/11/2003, 11h30

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