Bonsoir,
Je suis entrain de faire un interface en utilisant la SDL, et pour la création et positionnement des icônes j'utilise un vector afin de pouvoir ajouter ou retirer facilement des icônes. C'est l'utilisateur qui choisis les icones en éditant un fichier texte de cette syntaxe:
- La première ligne contient le nombre d’icône, exemple: 2
- Cette ligne contient la commande pour exécuter l'application, exemple: kodi
- Cette ligne contient le nom du fichier image, exemple: Kodi.png
(et ainsi de suite)
J'ai donc aussi une classe icone dont le constructeur est:
commande étant la commande décrit plus haut, et pathIcone est en fait le nom du fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part Icone::Icone(SDL_Surface* _affichage, int _r, int _g, int _b, int _x, int _y, char* _commande, char* _pathIcone)
cette classe contient une methode dessinIcone()
J'ai initialisé un vector de mon type Icone:
Je fais une lecture de fichier pour créer les icones:
Code : Sélectionner tout - Visualiser dans une fenêtre à part std::vector<Icone> tabIcone;
Une fois le vector remplis, je l'appelle dans une fonction dessinerInterface() qui permet de dessiner différents élèments de l'interface dont les icones (j'ai allégé la fonction avec seulement les élèments qui nous intéressent):
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 if(fichier) { int nbApp; std::string icone, commande, strNbApp; getline(fichier, strNbApp); if(!(std::istringstream(strNbApp) >> nbApp) ) nbApp = 0; std::cout << "nb app: " << nbApp << std::endl; for(unsigned int i = 0; i<nbApp; ++i) { getline(fichier, commande); getline(fichier, icone); nomIcone = (char*)icone.c_str(); //Conversion des string en char* pour les paramètres du constructeur commandeIcone = (char*)commande.c_str(); tabIcone.emplace_back(affichage, 0, 0, 0, 20*i, (maxH/10)+20, commandeIcone, nomIcone); //Constructeur } }
Pour cette partie j'ai aussi essayé avec un:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 void dessinerInterface(std::vector<Icone>& tabIcone) { for(unsigned int i=0; i<tabIcone.size(); ++i) { (tabIcone.at(i)).dessinIcone(); //Appel de la méthode de dessin } }
Le problème c'est que les icônes n'apparaissent pas à l'écran mais les autres éléments de l'interface oui, et si je crée les icônes "a la main" en instanciant et en appelant la méthode dessinIcone() en dur les icônes que je veux ça marche. Je ne vois pas d’où viens le problème et j'ai déjç utilisé une technique similaire dans un autre projet sans souci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for(auto &icone: tabIcone) ///Permet d'appliquer la methode � tout les mobs { icone.dessinIcone(); }
Partager