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

C++ Discussion :

manipuler un vector de type "classe"


Sujet :

C++

  1. #41
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Je suis d'accord avec rnr72 sur le coup de la taille du SDL_Rect utilisé pour SDL_BlitSurface
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  2. #42
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Non la largeur et hauteur de destination sont inutiles. Le rectangle destination n'est utilisé que pour la position, c'est la surface définie par la source qui est blittée à chaque fois, sans distorsion.
    Sinon, on va commencer par une chose à la fois avant de faire de la gestion de ressources et compagnie hein.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #43
    Membre habitué
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Exact, tu as raison Bousk :

    The width and height in srcrect determine the size of the copied rectangle. Only the position is used in the dstrect (the width and height are ignored).

    autant pour moi, fausse piste...

  4. #44
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    justement, srcrct est null dans son appel. Ca risque de poser un léger soucis, ca, non?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  5. #45
    Membre habitué
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Normalement non :

    If srcrect is NULL, the entire surface is copied. If dstrect is NULL, then the destination position (upper left corner) is (0, 0).

    https://wiki.libsdl.org/SDL_BlitSurface

  6. #46
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    la source null c'est pour indiquer qu'on copie la surface entièrement et non qu'une partie définie par ce rect
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #47
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    J'avais mit en commentaire pourquoi le NULL dans la source

    Est-ce qu'on pourrait se recentrer sur le problème de base, c'est a dire l'affichage de l'icone (ou le non-affichage du coup) si ca ne vous dérange pas, et voir les ressources / mémoire après ?

  8. #48
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Genre, 15 messages plus tôt, où je demande
    Citation Envoyé par Bousk Voir le message
    As-tu essayé déjà avec un nbApp=1 ?
    ?
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  9. #49
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Comme pour l'instant, le non affichage pourrai bien venir de la mauvaise gestion, c'est une piste non négligeable.

    Plus un code est correct, moins il peut avoir d'erreur.
    On ne peut pas dire, pour l'instant, ce qui cause le non affichage des icones du vector.

    Mon avis reste que c'est le contenu des variables membres du vector qui est mal géré.
    Peux-tu faire en sorte d'afficher le contenu complet du vector lorsque tu affiches? Quitte à volontairement interrompre la boucle de dessin après la première itération.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #50
    Membre habitué
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    oui, je suis d'accord avec leternel,

    dans ton cas, ce n'est pas très compliqué, ajoute un attribut sdl_surface* iconeSurface dans ta classe et écris une fonction load() dans laquelle tu initialises iconeSurface avec ton IMG_Load...

    et tu ne feras qu'un appel du genre icone.load()...

    vois-tu le truc?

  11. #51
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    Donc j'ai fait un espece de mélange de vos différents conseils.

    Donc j'ai modifié le constructeur pour qu'il charge l'image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Icone::Icone(SDL_Surface* _affichage, int _x, int _y, std::string _pathIcone)
            :affichage(_affichage), x(_x), y(_y), pathIcone(_pathIcone)
    {
      iconeSurface=IMG_Load(getPathIcone());
    }
    Mais je me demande si on peut appeler une fonction membre dans le constructeur, ca me semble un peu bizarre

    Dans le doute je l'ai aussi testé en chargeant l'image comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    iconeSurface=IMG_Load(_pathIcone.c_str());

    dans la fonction dessinIcone j'ai ajouté l'affichage du contenu du vector:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void Icone::dessinIcone()
    {
      SDL_Rect positionIcone;
     
      positionIcone.x=getX();
      positionIcone.y=getY();
     
      SDL_BlitSurface(iconeSurface, NULL, (affichage), &positionIcone);
      std::cout << "iconeSurface: " << iconeSurface << " surface source: " << affichage << " x,y:" << x << "," << y << " pathIcone: " << pathIcone << std::endl;
    }
    ce qui me donne comme resultat sur la console:

    iconeSurface: 0 surface source: 0xec43a0 x,y:0,0 pathIcone: Kodi.png
    iconeSurface: 0 surface source: 0xec43a0 x,y:20,20 pathIcone: Epiphany.png


    ce qui m'a l'air pas si faux que ca, si ce n'est les valeurs d'iconeSurface, mais je sais pas trop ce que c'est censé afficher.

    Je pense qu'a ce stade il est inutile de préciser que je n'ai toujours pas d'icone à l'écran ...

  12. #52
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Fais voir ta classe complete, avec les classes dont elle hérite.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  13. #53
    Membre habitué
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    coucou Kalemiro,

    Mais je me demande si on peut appeler une fonction membre dans le constructeur, ca me semble un peu bizarre
    si pas de problème, tu peux appeler fonction membre dans le constructeur cela fonctionne après savoir si c'est bien ou pas...

    ce qui m'a l'air pas si faux que ca, si ce n'est les valeurs d'iconeSurface, mais je sais pas trop ce que c'est censé afficher.
    Les données affichée sont en partie des pointeur donc ont un résultat du genre surface source: 0xec43a0 mais effectivement iconeSurface: 0 est un pointeur nul, il semblerai y avoir un problème avec le chargement de l'image.

    Comme le dit leternel, il faudrait pouvoir voir le reste du code.

    Et au passage d'où vient la fonction IMG_Load, car il ne semble pas que se soit dans la bibliothèque SDL?
    SDL_image, je suppose...

    Vérifie également l'emplacement de tes images (je sais c'est un truc con) car si tu utilise un IDE du style code::block l'emplacement d'execution n'est pas bin/debug mais l'emplacement de tes sources...

  14. #54
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Un autre moyen de vérifier ce problème spécifique, c'est de tester avec un chemin absolu pour le fichier d'image.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  15. #55
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 965
    Points
    32 965
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Kalemiro Voir le message
    iconeSurface: 0 surface source: 0xec43a0 x,y:0,0 pathIcone: Kodi.png
    iconeSurface: 0 surface source: 0xec43a0 x,y:20,20 pathIcone: Epiphany.png
    Enfin nous y sommes, malgré toutes les fois où tu nous a dit "ça marche quand j'utilise pas de vector", le problème est pourtant clair : ton IMG_Load retourne NULL parce que l'image n'est pas trouvée ou dans un format non géré par SDL_Image.
    Donc bon je sais pas trop dans quelles conditions ça marchait, mais commence par utiliser les mêmes path pour tester une nouvelle structure de code!
    Bon heureusement il existe IMG_GetError, mais ce n'est plus vraiment du ressort du forum C++ mais de celui du forum 2D/3D/Jeux depuis le début. Parce que l'ensemble de ton problème, après tout, n'est guère plus qu'une absence de lecture de la documentation et l'utilisation de SDL_Image.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  16. #56
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    Oui IMG_Load viens de SDL_Image ca me permet d'utiliser autre chose que des .bmp


    Vérifie également l'emplacement de tes images (je sais c'est un truc con)
    Je me suis fait avoir lors de mes premiers essais sur ca mais la elles sont bien dans le dossier

    (j'utilise pas d'IDE, juste un editeur de texte et gcc)


    Donc la j'avais refait ma classe icone pour faire des test et essayer de voir pourquoi ca marchait pas donc celle la ne dépend d'aucune autre classe j'ai juste repris les données membres et fonction utiles des autres classes pour les mettre dans celle la, voici le code:

    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
     
    class Icone
    {
    private:
      SDL_Surface* iconeSurface; //Surface de l'image de l'icone 
      std::string pathIcone; //Nom du fichier image
      SDL_Surface* affichage; //Surface source (l'écran)
      int x, y; //Coordonnées de positions
    public:
      Icone(SDL_Surface*, int, int, std::string);
      ~Icone();
     
      inline const char* getPathIcone() const {return pathIcone.c_str();} //On récupère un char* pour l'utiliser avec IMG_Load
      inline const SDL_Surface* getAffichage() const {return affichage;}
      inline const int getX() const {return x;}
      inline const int getY() const {return y;}
     
      void dessinIcone();
     
     
    };
     
     
     
     
    Icone::Icone(SDL_Surface* _affichage, int _x, int _y, std::string _pathIcone)
            :affichage(_affichage), x(_x), y(_y), pathIcone(_pathIcone)
    {
      iconeSurface=IMG_Load(getPathIcone()); //On charge l'image lors de l'appel du constructeur
    }
     
    Icone::~Icone()
    {}
     
     
     
     
     
    void Icone::dessinIcone()
    {
      SDL_Rect positionIcone; //Rectangle pour positionner l'icone
     
      positionIcone.x=getX();
      positionIcone.y=getY();
     
      SDL_BlitSurface(iconeSurface, NULL, (affichage), &positionIcone); //Parametres: image de l'icone, NULL = on affiche la totalité de l'icone, l'écran, position de l'icone
      std::cout << "iconeSurface: " << iconeSurface << " surface source: " << affichage << " x,y:" << x << "," << y << " pathIcone: " << getPathIcone() << std::endl;
    }

  17. #57
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 58
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Enfin nous y sommes, malgré toutes les fois où tu nous a dit "ça marche quand j'utilise pas de vector", le problème est pourtant clair : ton IMG_Load retourne NULL parce que l'image n'est pas trouvée ou dans un format non géré par SDL_Image.
    Donc bon je sais pas trop dans quelles conditions ça marchait, mais commence par utiliser les mêmes path pour tester une nouvelle structure de code!
    Bon heureusement il existe IMG_GetError, mais ce n'est plus vraiment du ressort du forum C++ mais de celui du forum 2D/3D/Jeux depuis le début. Parce que l'ensemble de ton problème, après tout, n'est guère plus qu'une absence de lecture de la documentation et l'utilisation de SDL_Image.
    Donc j'ai refait un bout de code basique tout simple ou je lit le fichier texte (qui comporte juste une ligne maintenant avec le nom de l'image) et je l'affiche, ca marche, voici le code:

    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
     
    int main()
    {
      init();
      SDL_Surface* imageSurface;
      char* nomImage;
      std::ifstream fichier("application.txt");
      std::string stringNomImage;
      if(fichier)
      {
        getline(fichier, stringNomImage);
      }
     
     
      nomImage = (char*)stringNomImage.c_str();
      imageSurface = IMG_Load(nomImage);
     
      SDL_Rect positionImage; //Rectangle pour positionner l'icone
     
      positionImage.x=50;
      positionImage.y=50;
     
      SDL_BlitSurface(imageSurface, NULL, affichage, &positionImage);
     
    }
    Manifestement l'image est trouvée, et le format est géré

  18. #58
    Membre habitué
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Dans ton code je ne vois pas l'initialisation de la variable affichage, je suppose qu'elle l'est par init() (non présentée) et donc que c'est une variable globale... c'est discutable.

    Ta variable nomImage ne sert à rien, met ton .c_str() directement dans ton IMG_Load, comme le dit leternel

    Une variable de moins est une source d'erreur en moins.
    Comme le dit Bousk, il faut que tu trouves pourquoi IMG_Load te retourne un pointeur NULL, je pense que tout le problème vient de là

  19. #59
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Le principe de base, en C++, c'est que c'est la chose qui acquiert une ressource qui doit la libérer.
    Ton constructeur appelle IMG_LOAD(), le destructeur devrait appeler la fonction symétrique (que je ne connais pas).
    De même, le constructeur doit s'assurer d'avoir réussi l'acquisition.
    Ces deux considérations sont l'essence de RAII.

    Enfin, toute classe ne devrait RAIIer qu'une seule ressource, peut-être devrais-tu créer une classe dédiée à la récupération d'une image.

    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
     
    namespace raii {
    class sdl_image {
    private:
        SDL_Surface* surface;
    public:
        void blit_at(SDL_Surface* affichage, SDL_Rect * position) const {
           SDL_BlitSurface(surface, NULL, affichage, position);
        }
     
        sdl_image(std::string const& path): surface(IMG_Load(path)){
    		if (!surface) {
    			throw std::runtime_error(IMG_GetError());
    		}
    	}
     
    	~sdl_image() {
    		SDL_FreeSurface(surface);
    	}
    };
    }
     
    class Icone {
    private:
    	raii::sdl_image image;
     
    	std::string pathIcone; //Nom du fichier image
    	SDL_Surface* affichage; //Surface source (l'écran)
    	SDL_Rect position;
    public:
    	Icone(SDL_Surface* affichage, int x, int y, std::string const& path):
    		pathIcone(path.c_str()), affichage(affichage), position{x, y, 0, 0};
    	{}
     
    	SDL_Surface const* getAffichage() const {return affichage;}
     
    	int getX() const {return position.x;}
    	int getY() const {return position.y;}
     
    	void dessinIcone() {image.blit_at(affichage, &position);}
    };
    Au passage, c'est dommage de lier l'image à son affichage.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  20. #60
    Membre habitué
    Homme Profil pro
    sans activité
    Inscrit en
    Janvier 2016
    Messages
    76
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : sans activité

    Informations forums :
    Inscription : Janvier 2016
    Messages : 76
    Points : 136
    Points
    136
    Par défaut
    Je suis entièrement d'accord avec leternel, on en revient à ce que nous te disions hier : la gestion des ressources.

    Dans tout les cas, tu finiras par y passer donc fait le dès maintenant

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 4 PremièrePremière 1234 DernièreDernière

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