Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques > SDL
SDL Forum d'entraide sur l'API SDL. Avant de poster -> FAQ SDL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/07/2012, 19h31   #1
helpmeplzzz
Invité de passage
 
Homme
Étudiant
Inscription : juin 2012
Messages : 7
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 : 7
Points : 3
Points : 3
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 :
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 :
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
helpmeplzzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2012, 01h32   #2
gheaeckkseqrz
Futur Membre du Club
 
Homme Pierre
Étudiant
Inscription : juillet 2008
Messages : 22
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 21
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juillet 2008
Messages : 22
Points : 16
Points : 16
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 :
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 :
      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.
gheaeckkseqrz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2012, 22h42   #3
helpmeplzzz
Invité de passage
 
Homme
Étudiant
Inscription : juin 2012
Messages : 7
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 : 7
Points : 3
Points : 3
Par défaut @gheaeckkseqrz

Merci beaucoup, j'ai maintenant un code fonctionnel tout en ayant compris enfin je lespere la suptilite avec les pointeur .
helpmeplzzz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h55.


 
 
 
 
Partenaires

Hébergement Web