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 migration SDL -> SDL2


Sujet :

SDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Problème migration SDL -> SDL2
    Bonjour ,Bonsoir

    je code un jeu 2D un peu comme pokemon pour m'entrainer et j'utilise la SDL 1.2:
    J'arrive a charger des images ,déplacer le sprite et tout.
    Ensuite j'ai voulu utiliser la SDL 2 .
    Mais quand j'ai voulu faire exactement la meme chose avec la sdl2 mon image n'avait pas la meme qualité que celle chargé avec la SDL 1.2

    voici ma classe :

    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
    #ifndef DECOR_H
    #define DECOR_H
    #include "SDL2/SDL.h"
    #include "SDL2/SDL_image.h"
    #include <stdio.h>
    #include "tilesol.h"
    #include <iostream>
    #include <fstream>
     
     
    class decor
    {
    private:
        typedef struct Gestion
        {
          SDL_Window *fenetre;
          SDL_Texture *texture;
          SDL_Renderer *renderer;
        } Gestion;
        Gestion Fenetre;
        TileSol *sol;
     
        SDL_Surface *tile;
        SDL_Rect positionCoucheSol;
     
     
        int hauteur, largeur, tab[50][50];
    public:
        decor();
        ~decor();
        int creation_fenetre();
        void creation_map();
    };
     
    #endif // DECOR_H
    voici le code SDL 1.2:
    et l'image :
    Nom : 131223104315975333.png
Affichages : 132
Taille : 84,1 Ko

    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
    83
    84
     
    decor::decor()
    {    
        Fenetre.fenetre=NULL;
        sol = new TileSol;
        tile = NULL;
        positionCoucheSol.x=0;
        positionCoucheSol.y=0;
        positionCoucheSol.h=400;
        positionCoucheSol.w=400;
     
    }
     
    int decor::creation_fenetre()
    {
     
        if(SDL_Init(SDL_INIT_VIDEO) != 0)
         {
             std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
     
             return -1;
         }
        Fenetre.fenetre = SDL_CreateWindow("Pokemon",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,400,400, SDL_WINDOW_SHOWN);
        if( Fenetre.fenetre )
        {
            return 1;
        }
        else
        {
            fprintf(stderr,"Erreur de création de la fenêtre: %s\n",SDL_GetError());
            return 0;
        }
     
    }
     
    void decor::creation_map()
    {
     
        tile = IMG_Load("/home/kristof/Pictures/tiles.png");
        ifstream fichier("/home/kristof/Programmation/VRAIPOKEMONSAMERE/test.txt", ios::in);
        fichier.seekg(0, ios::beg);
        fichier >> largeur;
        fichier >> hauteur;
     
        for (int u = 0;u<largeur;u++)
        {
               for (int i =0;i<hauteur;i++)
                {
                   fichier >> tab[u][i];
                   if(tab[u][i]==1)
                   {
                       positionCoucheSol.x=(i*400)/largeur;
                       SDL_BlitSurface(tile,sol->get_sol(tab[u][i]),SDL_GetWindowSurface(Fenetre.fenetre),&positionCoucheSol);
                   }
                   if(tab[u][i]==2)
                   {
                       positionCoucheSol.x=(i*400)/largeur;
     
                        SDL_BlitSurface(tile,sol->get_sol(tab[u][i]),SDL_GetWindowSurface(Fenetre.fenetre),&positionCoucheSol);
     
                   }
                   positionCoucheSol.x+=16;
                }
     
               positionCoucheSol.x=0;
               positionCoucheSol.y+=16;
        }
     
     
     
    SDL_UpdateWindowSurface(Fenetre.fenetre);
        // Mise à jour de la fenêtre pour prendre en compte la copie du sprite
        SDL_Delay(10000);
    }
     
    decor::~decor()
    {
        SDL_DestroyTexture(Fenetre.texture);
        SDL_DestroyRenderer(Fenetre.renderer);
        SDL_DestroyWindow(Fenetre.fenetre);
        SDL_Quit();
        delete this;
     
    }

    le code SDL 2:
    et l'image :
    Nom : 131223104509544002.png
Affichages : 112
Taille : 83,3 Ko
    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
    83
    84
    85
    86
    87
    88
    decor::decor()
    {    
        Fenetre.fenetre=NULL;
        sol = new TileSol;
        tile = NULL;
        positionCoucheSol.x=0;
        positionCoucheSol.y=0;
        positionCoucheSol.h=400;
        positionCoucheSol.w=400;
     
    }
     
    int decor::creation_fenetre()
    {
     
        if(SDL_Init(SDL_INIT_VIDEO) != 0)
         {
             std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
     
             return -1;
         }
        Fenetre.fenetre = SDL_CreateWindow("Pokemon",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,400,400, SDL_WINDOW_SHOWN);
        if( Fenetre.fenetre )
        {
            return 1;
        }
        else
        {
            fprintf(stderr,"Erreur de création de la fenêtre: %s\n",SDL_GetError());
            return 0;
        }
     
    }
     
    void decor::creation_map()
    {
     
        Fenetre.renderer = SDL_CreateRenderer(Fenetre.fenetre,-1,SDL_RENDERER_ACCELERATED);
        tile = IMG_Load("/home/kristof/Pictures/tiles.png"); //SDL_CreateTextureFromSurface(Fenetre.renderer,tile);
        Fenetre.texture = SDL_CreateTextureFromSurface(Fenetre.renderer,tile);
     
        ifstream fichier("/home/kristof/Programmation/VRAIPOKEMONSAMERE/test.txt", ios::in);
        fichier.seekg(0, ios::beg);
        fichier >> largeur;
        fichier >> hauteur;
     
        for (int u = 0;u<largeur;u++)
        {
               for (int i =0;i<hauteur;i++)
                {
                   fichier >> tab[u][i];
                   if(tab[u][i]==1)
                   {
                       positionCoucheSol.x=(i*400)/largeur;
                       //cout<<SDL_BlitSurface(tile,sol->get_sol(tab[u][i]),SDL_GetWindowSurface(Fenetre.fenetre),&positionCoucheSol)<<endl;
     
                        cout<<SDL_RenderCopy(Fenetre.renderer,Fenetre.texture,sol->get_sol(tab[u][i]),&positionCoucheSol)<<endl;
                        cout<<SDL_GetError()<<endl;
                   }
                   if(tab[u][i]==2)
                   {
                       positionCoucheSol.x=(i*400)/largeur;
     
                       cout<<SDL_RenderCopy(Fenetre.renderer,Fenetre.texture,sol->get_sol(tab[u][i]),&positionCoucheSol)<<endl;
                       cout<<SDL_GetError()<<endl;
     
                   }
                   positionCoucheSol.x+=16;
                }
     
               positionCoucheSol.x=0;
               positionCoucheSol.y+=16;
        }
     
        SDL_RenderPresent(Fenetre.renderer);
        // Mise à jour de la fenêtre pour prendre en compte la copie du sprite
        SDL_Delay(10000);
    }
     
    decor::~decor()
    {
        SDL_DestroyTexture(Fenetre.texture);
        SDL_DestroyRenderer(Fenetre.renderer);
        SDL_DestroyWindow(Fenetre.fenetre);
        SDL_Quit();
        delete this;
     
    }
    On voit bien que la première image afficher certains pixels et pas l'autre
    J'ai déjà chercher et je n'ai pas trouvé.

    Merci de votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Que se passe t-il si vous essayez d'afficher une SDL_Surface, sans la transformer en SDL_Texture ? Est-ce qu'elle sera normale ?
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Problème de SDL, clique souris
    Par K4trix dans le forum SDL
    Réponses: 6
    Dernier message: 12/07/2006, 10h58
  2. Problème fonction SDL
    Par seeme dans le forum SDL
    Réponses: 2
    Dernier message: 06/11/2005, 20h22
  3. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 09h10
  4. Problème Migration Oracle
    Par bob_doulz dans le forum Administration
    Réponses: 4
    Dernier message: 20/04/2004, 09h56
  5. Réponses: 3
    Dernier message: 18/11/2002, 16h36

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