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 :

Problème avec la fonction SDL_BlitSurface


Sujet :

SDL

  1. #1
    Membre du Club Avatar de CactO_o's
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 98
    Points : 47
    Points
    47
    Par défaut Problème avec la fonction SDL_BlitSurface
    Bonjour à tous, j'ai un gros problème que je ne comprend vraiment pas...
    Le but est d'utiliser l'image ci dessous pour faire un mapping :

    Je voudrais ensuite les mettre dans les 28cases d'un tableau de Surface pour pouvoir ensuite les utiliser lors du mapping...

    Le problème se trouve dans la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_BlitSurface(chipsetMap, &RectFrame, frameMap[i], &RectChipset);
    Voici le code complet :
    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
    #define TAILLE_TABLEAU 256
    #define TAILLE_FRAME    25
     
    #define NB_FRAME        28
     
    SDL_Surface* remplissageMap(char tableauMap[][TAILLE_TABLEAU], int tailleX, int tailleY, SDL_Surface * &screen)
    {
        SDL_Surface * chipsetMap = SDL_LoadBMP("data/picture/map/skin12.bmp");
        SDL_Surface * frameMap[NB_FRAME] = {NULL};
     
        SDL_Rect RectChipset;
        RectChipset.x = 0;
        RectChipset.y = 0;
     
        SDL_Rect RectFrame;
        RectFrame.y=0;
        RectFrame.w=25;
        RectFrame.h=25;
     
        for(int i=0; i<NB_FRAME; i++)
        {
            RectFrame.x=i*TAILLE_FRAME;
            SDL_BlitSurface(chipsetMap, &RectFrame, frameMap[i], &RectChipset);
            if(frameMap[i] == NULL)
                           exit(0);
        }
    }
    Le problème est que frameMap[] est toujours égal à NULL...

    J'ai pourtant essayer quelque chose comme ça pour faire des tests :
    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
    #define TAILLE_TABLEAU 256
    #define TAILLE_FRAME    25
     
    #define NB_FRAME        28
     
    SDL_Surface* remplissageMap(char tableauMap[][TAILLE_TABLEAU], int tailleX, int tailleY, SDL_Surface * &screen)
    {
        SDL_Surface * chipsetMap = SDL_LoadBMP("data/picture/map/skin12.bmp");
        SDL_Surface * frameMap[NB_FRAME] = {NULL};
     
        SDL_Rect RectChipset;
        RectChipset.x = 0;
        RectChipset.y = 0;
     
        SDL_Rect RectFrame;
        RectFrame.y=0;
        RectFrame.w=25;
        RectFrame.h=25;
     
        for(int i=0; i<NB_FRAME; i++)
        {
            RectFrame.x=i*TAILLE_FRAME;
            RectChipset.x = i*TAILLE_FRAME;
            RectChipset.y = i*TAILLE_FRAME;
            SDL_BlitSurface(chipsetMap, &RectFrame, screen, &RectChipset);
        }
        SDL_Flip(screen);
    }
    Et la je me retrouve bien avec une cascade de petite image comme prévu...


    Voilà, je pense que vous savez tous, merci à tous de bien vouloir m'aider
    KreatoO

  2. #2
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    Salut,

    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
    #define TAILLE_TABLEAU 256
    #define TAILLE_FRAME    25
     
    #define NB_FRAME        28
     
    SDL_Surface* remplissageMap(char tableauMap[][TAILLE_TABLEAU], int tailleX, int tailleY, SDL_Surface * &screen)
    {
        SDL_Surface * chipsetMap = SDL_LoadBMP("data/picture/map/skin12.bmp");
        SDL_Surface * frameMap[NB_FRAME] = {NULL};
     
        SDL_Rect RectChipset;
        RectChipset.x = 0;
        RectChipset.y = 0;
     
        SDL_Rect RectFrame;
        RectFrame.y=0;
        RectFrame.w=25;
        RectFrame.h=25;
     
        for(int i=0; i<NB_FRAME; i++)
        {
            RectFrame.x=i*TAILLE_FRAME;
            SDL_BlitSurface(chipsetMap, &RectFrame, frameMap[i], &RectChipset);
            if(frameMap[i] == NULL)
                           exit(0);
        }
    }
    Je ne vois nulle part où tu mets quelque chose dans framemap

  3. #3
    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
    Citation Envoyé par CactO_o's Voir le message
    Le problème se trouve dans la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SDL_BlitSurface(chipsetMap, &RectFrame, frameMap[i], &RectChipset);
    Le problème est que frameMap[] est toujours égal à NULL...
    Attention : SDL_BlitMapSurface copie les données d'une surface dans les pixels d'une autre surface. Elle ne crée pas une nouvelle surface.

    Il faudrait créer une nouvelle surface avec SDL_CreateRGBSurface. Mais cela est inutile ici. Crée simplement un tableau de SDL_Rect qui représentera chaque partie de ton image de base. Ensuite, tu utiliseras toujours l'image de base mais avec un SDL_Rect source différent.

    Regarde ici pour comprendre comment ca devrait fonctionner :
    http://loka.developpez.com/tutoriel/sdl/sprites/

    Jc

Discussions similaires

  1. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

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