Bienvenue, Invité. Merci de vous connecter ou de vous inscrire. Avez-vous oublié d'activer ?

Voir les contributions

Cette section vous permet de consulter les contributions (messages, sujets et fichiers joints) d'un utilisateur. Vous ne pourrez voir que les contributions des zones auxquelles vous avez accès.


Messages - christophedlr

Pages: [1] 2 3 ... 6 Suivante »
1
Avec l'aide de ChatGPT en créant un projet vide pour les tests, j'ai résolu le soucis :
Il faut bien penser à passer le sf::Font en tant que référence, sinon effectivement on a un point blanc et c'est tout.

2
Bonjour,

Dans le cadre de mon activité (micro-entreprise), je suis en train de développer un jeux vidéo, mais je me retrouve face à un problème : j'ai besoin d'un système GUI personnalisable et TGui ne fonctionne pas (API différente de la documentation et des tutos, résultat même impossible d'initialiser, bref).

Donc dans le cadre de mon projet, je suis en train de faire mon propre système GUI au niveau du jeu, et pour démarrer je m'attaque aux boutons (élément en général le plus simple).

Pour commencer le cadre :
J'ai une classe Button héirtant de sf::Drawable et sf::Transformable. J'ai implémenté la méthode draw.

Voilà le problème :
Le texte du bouton ne s'affiche pas, j'ai bien le cadre (sf::RectangleShape), mais pas le texte (sf::Text), j'ai juste un simple point et je ne comprends pas pourquoi.

Compléments d'informations :
Pour expliquer en gros ce que vous allez voir : j'ai une classe RenderWindow qui est un sf::RenderWindow. Le but étant, de gérer la boucle d'événement d'une façon différente. A savoir, que la boucle est directement gérée par mes différentes classes, car j'en ai une pour gérer les logos, une autre pour le menu (là où j'en suis ^^), et ainsi de suite.

Je ne veux donc pas avoir une super grosse boucle dans le main qui doit tout gérer et dont se sera le bordel intégral, donc ma RenderWindow me sert pour disposer d'une méthode permettant de déterminer si on doit stopper ou non la boucle.

Depuis cette RenderWindow, j'ai une classe Window qui en hérite et qui est le coeur de la gestion de ma fenêtre, avec une méthode loop gérant une boucle de base (le while is_open), à partir de là, j'appel la boucle définie par la classe utilisant la fenêtre.

Voilà un peu pour le contexte de fonctionnement global. Donc là dans le code, j'ai deux textes : le premier qui est une instance de ma classe Button et qui ne fonctionne pas, et l'autre directement un sf::Text avec la même font et qui fonctionne.

Donc en premier le code appelant :
#include "Menu.h"

Menu::Menu(Window *window)
{
    m_font.loadFromFile("assets/fonts/Roboto-Regular.ttf");
    m_exitButton.setTextFont(m_font);
    m_exitButton.setText("Coucou");

    m_text.setString("Ttest");
    m_text.setFillColor(sf::Color(255, 0, 0));
    m_text.setFont(m_font);

    window->loop([this](RenderWindow& win) { this->loop(win); });
}

Menu::~Menu()
{
    //dtor
}

void Menu::loop(RenderWindow& window)
{
    sf::Event event;
    window.setRunningLoop(true);

    while (window.pollEvent(event))
    {
        // Close window : exit
        if (event.type == sf::Event::Closed)
            window.close();
    }

    window.clear();
    //window.draw(m_text);
    window.draw(m_exitButton);
    window.display();
}
 

m_exutButton est un Button, dont voici le code :
#include "gui/Button.h"

Button::Button()
{
    init();
}

Button::Button(sf::Font font)
{
    m_text.setFont(font);

    init();
}

void Button::init()
{
    m_shape.setSize(sf::Vector2f(100,30));
    m_shape.setFillColor(sf::Color(179, 179, 179));

    m_text.setString("Button");
    m_text.setFillColor(sf::Color(179, 179, 179));
    m_text.setPosition(15, 15);
}

void Button::setTextSize(unsigned int size)
{
    m_text.setCharacterSize(size);
}

void Button::setTextColor(const sf::Color color)
{
    m_text.setFillColor(color);
}

void Button::setTextStyle(unsigned int style)
{
    m_text.setStyle(style);
}

void Button::setText(sf::String text)
{
    m_text.setString(text);
}

void Button::setTextFont(sf::Font font)
{
    m_text.setFont(font);
}

void Button::draw(sf::RenderTarget& target, sf::RenderStates states) const
{
    //target.draw(m_shape, states);
    target.draw(m_text, states);
}
 

Pour mes tests, j'ai désactivé le draw du cadre.

Et voici le résultat obtenu :


Comme on peut le constater, j'ai un simple point en blanc.alors qu'en plus je met du gris, comme s'il ignorait le setString et setFillColor en plus du setPosition d'ailleurs.

Merci d'avance pour votre aide.

3
Graphique / Re: [VSYNC] Framerate instable
« le: Juin 01, 2018, 11:31:30 am »
As-tu essayer de ne pas fixer un framerate ? Car le principe du vsync (Vertical Synchronization), c'est de limiter le framerate à celui de l'écran.

En terme de fluidité donc il vaut mieux éviter le vsync, et la limite de FPS car la limite de FPS produit moins de consommation CPU/GPU certes, mais le framerate est plutôt instable pour ce que j'ai constaté sur les jeux depuis quelques temps.

Si le problème se règle par diverses actions en dehors de l'application, cela me fait penser à windows qui pédale dans la semoule.

Est-ce que sur un projet basique (peut d'éléments affichés), tu as le même soucis ?

4
Merci ^^ Mais je penses que je n'ai pas encore le niveau pour comprendre ce design pattern :S

Ce que j'ai fais, c'est qu'au lieu de faire une "action" (exemple : Lorsque je passes la souris par dessus un bouton, celui-ci " s'enfonce "),  j'ai mis des flêches à côté du bouton sur lequel je suis avec le clavier.

Au lancement du programme, les flêches sont déja en haut, à côté du bouton "jouer". Puis, lorsque j'appuie sur la touche "Down", la flêche descend de X pixels pour se retrouver à côté du bouton en dessous, et inversément pour la touche "Up".

Après, pour la souris, je vais faire en sorte que lorsque la souris soit entre "tel position X Y", il se passe une action (comme le bouton qui s'enfonce si la souris est entre les points X Y de l'image).

Tu as en effet trouver la bonne solution. Alors pour te faire l'analogie avec les systèmes de fenêtres de windows, Linux et autres OS, il faut savoir que même si nous on ne le fait, eux derrière ils calcule le clique justement sur la position du bouton.

Si ton bouton est positionné par exemple à 30 px du bord à gauche, 30 px du bord en haut, le point en haut à gauche est donc à une position 30x30.
Maintenant regarde sa taille, il fait par exemple 100 px de large et 40 px de haut, il s'étends de 30 px du bord gauche jusqu'à 130 px de ce même bord (soit donc une largeur de 100 px, on est bon).
Pour le haut, il fait 40 px de haut en démarrant à 30 px du haut, donc il part de 30 px à 70 px en partant du haut.

Pour résumer donc ton bouton fait dans mon exemple 100x40, il démarre en 30x30 et se termine (bord inférieur droit) en 130x70. Windows par exemple dans son système de gestion des fenêtres, va donc regarder quand tu cliques, si tu es sur une des coordonnées entre le point 30x30 et le point 130x70, puis si ton bouton à un événement de clique, si c'est le cas il le déclenche alors.


Dans le domaine du jeux vidéo, ce système n'est pas de base en place par l'OS, il faut donc le coder. A toi donc de coder une fonction qui va vérifier les coordonnées de ta souris, si tu es entre 30x30 et 130x70, alors tu es bien sur le bouton, a toi ensuite de gérer le clique, double clique, clique droit, clique du milieu, le "hover" (passer juste la souris sur le bouton) et j'en passe.



Le mieux, tu te fait un petit projet totalement séparé (un programme de test), où tu gères un bouton comme ça, puis tu regardes pour en gérer un second. A partir de là, tu verras de la redondance de code, ben tu regardes alors si tu n'as pas moyen de faire une fonction qui sera utilisée par les deux boutons, des informations seraient alors nécessaire comme la taille du bouton et sa position de départ (coin en haut à gauche).

Après tu peux faire évoluer, avec une classe pour gérer ton bouton. Cette dernière permettrait alors de créer visuellement le bouton, gérer la position de la souris donc savoir si on est sur le bouton ou non, et pourquoi pas le clique et autres.

Je reprends l'analogie avec les OS (exemple Windows ce qui est bien plus parlant pour la plupart d'entre vous qui êtes sous windows ;) ), l'API du système fournis déjà des fonctions pour la gestion du clic (ces fameux événements), mais derrière le code de windows fait exactement ce dont on vient de parler :

Dans la boucle principale du programme (car oui les programmes ont obligatoirement une boucle événementiel comme on le fait avec SFML), l'API gère l'affichage du bouton mais aussi la position de la souris, le clavier etc. et intercepte (comme SFML) les cliques et autres, le tout permettant au travers des "événements", de gérer le fait qu'on a cliquer, fait un clique droit, passer la souris dessus etc.

Du coup la première chose donc que je te propose : fait un truc à part pour gérer 1 bouton (cherche pas à faire une fonction pour l'instant), puis gère un second bouton dans ta fenêtre (en plus du premier avec éventuellement un autre événement genre un avec clique gauche, l'autre clique droit).

Puis relis ton code, tu constateras alors du code identique ou quasi identique, voit donc ensuite pour faire une fonction où tu as juste à fournir des infos en paramètres pour qu'il sache sur quoi travailler. Il ne reste donc de propre à tes deux boutons que les événements. Ben regarde alors si tu as pas une autre fonction possible pour cela.

Quand tu auras réussi à le faire, suffit juste de rassembler le tout dans une classe ; reste encore le fait que tu appels plusieurs fonctions : une pour vérifier les coordonnées et une pour déclencher une action (les paramètres indiques la fonction à appeler pour l'action). Ben à voir si tu n'as pas la possibilité alors de faire une autre fonction par-dessus, qui va elle prendre toutes les informations nécessaire, appeler la première pour vérifier les coordonnées, et appeler la seconde si on est dans le cas des coordonnées, pour vérifier si une action est associée.

Arrivée déjà aux deux fonctions totalement séparées, tu as un début d'API utilisable en C (ce qui cadre avec le cas de l'OS), quand tu le passes en tan que classe qui gère le tout, tu as un composant C++ qui va gérer à la fois le visuel, les coordonnées et les actions (les événements). Tu peux ensuite réutiliser ce composant dans tes autres projets et faire pareil pour les fenêtres, les combobox, les checkbox et j'en passe suivant tes besoins.

Le tout définissant alors au final une API de gestion des fenêtres en SFML, et tu as devant toi un projet intéressant à séparer de tes autres projets pour le montrer à la communauté (en plus ;) ).

5
Laurent, le sf:String ne pourrait pas gérer en standard l'UTF-8 sans devoir convertir vers le latin-1 ?Comme l'UTF-8 est maintenant la norme de codage et que sous Linux c'est l'encodage en usage par défaut. Ou est-ce que le problème se situe juste avec windows qui n'est pas UTF-8 par défaut justement ?:

6
Général / Re : Créer une librairie utilisant SFML
« le: Juillet 19, 2015, 09:49:10 am »
Concernant ton second problème je ne pourrais hélas pas t'aider. Pour le premier, tu as un autre choix de résolution : compilation statique, c'est à dire que ta librairie contient la SFML et non en dépend, ce qui te permet alors de linker que ta librairie et non la SFML en plus.

Si le but est de fournir ensuite ta librairie, cela peut être une bonne idée d'utiliser la SFML en statique et donc incluse dans ta lib, comme ça pas besoin d'installer la SFML + ta lib pour utiliser ta lib, suffit que de la tienne.

7
Général / Re : OpenGL
« le: Juillet 19, 2015, 09:46:15 am »
Sur OpenClassrooms tu as un tutoriel (un peut vieux certes) qui t'apprends OpenGL avec la SDL, tu as juste à transcrire les instructions SDL par la SFML ; sachant que l'utilisation de la SDL dans le tuto est assez faible, quasi tout se fait en OpenGL (logique pour un tuto OpenGL). Ca te donnera déjà une base sur OpenGL.

8
Projets SFML / Re : SFMLTris - Un tetris un peut particulier mais commun
« le: Juillet 14, 2015, 08:24:18 pm »
J'ai en effet rien à montrer pour l'instant et comme tu le dis c'est pas palpitant lol. Toutefois, le fait de poster même si le codage à commencer aujourd'hui, cela me pousse à travailler à fond dessus ; j'ai déjà eu d'autres projets en SFML, tous mis au rencard assez vite par manque de temps ou de motivation.

Le fait d'en parler, m'incite donc à bosser dessus ;).

9
Projets SFML / SFMLTris - Un tetris un peut particulier mais commun
« le: Juillet 14, 2015, 12:11:32 pm »
Bonjour à tous,

Voilà je souhaite vous présenter le projet que j'ai en tête et que j'ai commencé à coder ce matin. Il s'agit d'un Tetris. Ce n'est certes pas original mais c'est pour me remettre à la SFML que je n'ai plus utilisé depuis la bêta 2.0 ce qui remonte à 2012 pour ma part.

Ce Tetris n'aura donc rien de surprenant à part une chose : la possibilité de sauvegarder et charger sa partie. en effet, c'est un bon défouloir mais pouvoir s'arrêter en plein milieu d'une partie et la reprendre est une chose que personnellement j'aurais voulut avoir dans les Tetris que je trouve sur le web.

Le jeu aura aussi la possibilité de sauvegarder le score et même de l'envoyer en ligne (sur mon site) afin de permettre à tous de voir les scores de chacun, histoire de relancer le bon vieux principe du Hightscore.

Pour l'instant, il ne sera dispo qu'en anglais et seul le menu est pour l'instant coder en partie, le reste va vite arriver car je fais être assez actif sur ce projet. Des screenshots arriveront très vite ;).

10
Général / Re : Installation SFML
« le: Juillet 14, 2015, 12:07:38 pm »
Oui j'en suis certains, j'ai récupérer l'archive du site pour Linux en 64-bits, puis j'ai mis le contenu du dossier include dans /usr/include et du dossier lib dans /usr/lib.

C'est pourquoi j'ai pas compris justement, bref de mon côté j'ai résolu en arrivant enfin à compiler la SFML ; mais bon si d'autres on le même soucis que moi, si on peut trouver la provenance du problème afin que d'autres ne soient pas obligé de recompiler la lib, c'est toujours mieux ;).

Pour l'équipe, ben je découvre, quand je t'avais contacté par MP à l'époque, c'étais en 2012 pour un exposé que j'avais a faire et j'avais choisis la SFML et c'est là que tu m'avais confirmé être seul ;). D'ailleurs j'aurais un autre problème à te soumettre et soumettre à ton équipe, mais ça fera l'objet d'un autre topic.

11
Général / Re : Installation SFML
« le: Juillet 14, 2015, 09:57:33 am »
Bon voilà la sortie renvoyée par g++ dans codeblocks sous Linux :

-------------- Clean: Debug in SFMLTris (compiler: GNU GCC Compiler)---------------

Cleaned "SFMLTris - Debug"

-------------- Build: Debug in SFMLTris (compiler: GNU GCC Compiler)---------------

g++ -std=c++11 -Wall -std=gnu++11 -DSFML_STATIC -pg -g -Wmain -Wextra -Wall -ansi  -c /home/christophedlr/prog/SFML/SFMLTris/src/main.cpp -o /home/christophedlr/prog/SFML/SFMLTris/.objs/src/main.o
In file included from /home/christophedlr/prog/SFML/SFMLTris/src/main.cpp:2:0:
/home/christophedlr/prog/SFML/SFMLTris/src/config.h:6:14: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
  int major = 1;
              ^
/home/christophedlr/prog/SFML/SFMLTris/src/config.h:7:14: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
  int minor = 0;
              ^
/home/christophedlr/prog/SFML/SFMLTris/src/config.h:8:22: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
  std::string state = "Alpha";
                      ^
g++  -o sfmltris /home/christophedlr/prog/SFML/SFMLTris/.objs/src/main.o  -lsfml-graphics -lsfml-window -lsfml-system -pg  
/usr/bin/ld: escamotage incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libsfml-graphics.so lors de la recherche de -lsfml-graphics
/usr/bin/ld: escamotage incompatible /usr/lib/../lib/libsfml-graphics.so lors de la recherche de -lsfml-graphics
/usr/bin/ld: escamotage incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../libsfml-graphics.so lors de la recherche de -lsfml-graphics
/usr/bin/ld: escamotage incompatible //usr/lib/libsfml-graphics.so lors de la recherche de -lsfml-graphics
/usr/bin/ld: ne peut trouver -lsfml-graphics
/usr/bin/ld: escamotage incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libsfml-window.so lors de la recherche de -lsfml-window
/usr/bin/ld: escamotage incompatible /usr/lib/../lib/libsfml-window.so lors de la recherche de -lsfml-window
/usr/bin/ld: escamotage incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../libsfml-window.so lors de la recherche de -lsfml-window
/usr/bin/ld: escamotage incompatible //usr/lib/libsfml-window.so lors de la recherche de -lsfml-window
/usr/bin/ld: ne peut trouver -lsfml-window
/usr/bin/ld: escamotage incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libsfml-system.so lors de la recherche de -lsfml-system
/usr/bin/ld: escamotage incompatible /usr/lib/../lib/libsfml-system.so lors de la recherche de -lsfml-system
/usr/bin/ld: escamotage incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../libsfml-system.so lors de la recherche de -lsfml-system
/usr/bin/ld: escamotage incompatible //usr/lib/libsfml-system.so lors de la recherche de -lsfml-system
/usr/bin/ld: ne peut trouver -lsfml-system
collect2: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 0 second(s))
0 error(s), 3 warning(s) (0 minute(s), 0 second(s))
 

Pour ce qui est de la lib xcb-util-image, en fait sur mon Ubuntu (14.04), apparemment le nom est libxcb-image0 ainsi que la version dev bien entendu.

Par contre avec libxcb-image0 et les autres dépendances installées, j'ai pu recompiler la SFML et maintenant ça marche avec la version recompilée, j'ai plus l'erreur d'escamotage.

Mais je comprend pas cette erreur avec la version donnée sur le site.

12
Général / Re : Installation SFML
« le: Juillet 14, 2015, 08:42:19 am »
Toute une équipe ? Pourtant à l'époque de la bêta SFML2.0 par MP tu m'avais confirmé être seul sur le dev de la lib, je savais pas que ça avait changé ;).

En fait quand il parle d'escamotage incompatible, il me met le lien derrière vers libsfml-graphics.so, libsfml-window.so et libsfml-system.so.

Là je suis sous Windows, dès que je retourne sous Linux (normalement tout a l'heure, maxi en début d'aprem), je te met un copier/coller complet du message.

13
Général / Re : Installation SFML
« le: Juillet 14, 2015, 07:49:35 am »
Merci victor, je regarde ça tout à l'heure en allant sous Linux, en espérant que se soit bon.
Tout ça pour recompiler la SFML parce que la version 64-bits que Laurent fournis refuse de marcher chez moi (gcc me dit : escamotage incompatible si au moins cet âne daignait être plus explicite lol).

14
Général / Re : Installation SFML
« le: Juillet 13, 2015, 03:21:52 pm »
Oui mais j'ai beau la chercher, elle n'y est pas dans les dépôts Ubuntu et en cherchant sur le net, je trouve rien dessus.

Sinon dans les dépôts y a bien la SFML se serait la solution de facilité, mais c'est la 2.0 et je sais pas s'il y a bcp de changement entres les 2 versions car sous Windows c'est bien la 2.3 que j'utilises. Mes programmes étant fait pour Windows et Linux (mais dev sous Linux car plus facile), je ne veux pas devoir repasser sur la 2.0 sous windows.

15
Général / Installation SFML
« le: Juillet 13, 2015, 02:47:35 pm »
Bonjour,

J'ai un petit soucis, je suis Linux x64, j'ai donc installé la version 64-bits fournie sur le site. Sauf que j'ai le compilateur qui me renvoi des erreurs d'escamotage.

Après une recherche on me dit qu'il ne trouve pas les libs ou qu'elles sont pas compatibles, suivant un des messages de Laurent sur le forum anglais, j'ai décidé de compiler la SFML depuis les sources.

Mais voilà, CMake refuse, me disant qu'il ne trouve pas LIBXCB_IMAGE, hors la librairie xcb est bien installé.


Merci d'avance pour votre aide.

Pages: [1] 2 3 ... 6 Suivante »
anything