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.


Sujets - Glân de Brylan

Pages: [1] 2 Suivante »
1
Bonjour,

En travaillant sur une petite bibliothèque basée sur la SFML, j'ai créé un éditeur de texte et me suis dit que ce serait bien de pouvoir y appliquer des filtres, pour que l'utilisateur ne puisse taper que des chiffres par exemple.
Je me suis du coup rendu compte que sf::String ne permettait pas ce genre de chose.
Du coup j'ai codé un petit truc moi-même (voir plus bas), mais je me suis dit que ce serait pas mal de l'intégrer à la SFML.
Le code ci-dessous n'est qu'une suggestion, je pense que M.Gomilla (ou n'importe qui de plus expérimenté que moi) saura faire mieux.

typedef std::vector<sf::Uint32> CharFilter;

/**
 * \brief Applies the given filter to the string.
 *
 * The filter will remove every character from str that is not in the filter, unless you set the 'exclusive' paramter to true, then it will do the opposite (and remove every character that is in the filter).
 * An empty filter is considered as being "no filter", and thus do not have any effect.
 *
 * \param filter The filter to apply.
 * \param Set to true* if you want the filter to be exclusive, set to false* otherwise.
 */

void String::applyFilter(CharFilter filter, bool exclusive = false)
{
    if(!filter.empty())
    {
        for(std::size_t i = 0 ; i < m_string.getSize() ; i++)
            if( ( std::find(filter.begin(), filter.end(), m_string[i]) != filter.end() ) == exclusive )
                m_string.erase(i);
    }
}

2
Général / [Résolu]Warnings ennuyeux
« le: Août 24, 2015, 03:34:35 pm »
Bonjour,

Ce n'est pas vraiment un problème dans la mesure où cela n'empêche mon programme ni de compiler ni de fonctionner, mais quand je compile en mode Release et reçois des palettes d'avertissements de type "warning: inlining failed in call to 'virtual sf::Text::~Text() noexcept': call is unlikely and code size would grow [-Winline]". J'en ai au moins une bonne vingtaine des comme ça.

Ce qui est étrange est quand dans les fichiers concernés le mot-clé inline n'est nulle part...

C'est ennuyeux dans le mesure où cela me gêne pour voir les autres avertissements qui pourraient m'être utiles.

Y a-t-il un moyen de les retirer autrement qu'en retirant le flag -Winline de mon compilo ou dois-je faire avec ? Merci d'avance.

3
Graphique / [Résolul] sf::Rect inverse left et top
« le: Août 24, 2015, 11:33:25 am »
Bonjour,

Je crois avoir trouvé un bug : sf::Rect utilise left comme coordonnée y et top comme coordonnée x.
Pour preuve, si je fais le code suivant (où target est un IntRect) :
if(target.contains(sf::Mouse::getPosition(window)))
{
    std::cout<<"Found it, GG !\n";
    return true;
}
else
    return false;
 
Et que la souris est dans le rectangle, la fonction renvoie false. Par contre si je fais :
sf::Vector2i mousePos(sf::Mouse::getPosition(window).y, sf::Mouse::getPosition(window).x); // on inverse x et y...
if(target.contains(mousePos))
{
    std::cout<<"Found it, GG !\n";
    return true;
}
else
    return false;
Le fonction renvoie true. Alors évidemment c'est contournable comme je viens de le faire mais c'est assez gênant quand même.

Dites-moi si c'est un vrai bug, si je suis le seul à l'avoir ou si je m'y prend juste mal ?
Sachant que j'utilise SFML 2.3.1, soit la dernière version.

4
Général / Point d'entrée introuvable
« le: Août 06, 2015, 11:31:37 pm »
Bonjour à tous,

Il m'était venu à l'idée un petit jeu et je me suis donc dit qu'il était temps de dépoussiérer SFML. J'en profite pour aller vérifier s'il y a eu des mises à jour et, surprise ! il en en a eu. Je passe donc de la 2.2 à la 2.3.1.
Je configure mon projet pour donner le chemin vers le dossier include, le dossier lib, je met les bons fichiers dans le linker (avec les -d pour le mode debug et tout ça).
Comme d'hab quoi. Exactement comme je faisais avec chaque nouveau projet SFML et comme indiqué dans le tuto. Puis je met les .dll dans le dossier de l'exécutable (encore une fois en faisant gaffe aux -d).

Seulement voilà : en exécutant une première fois le programme pour un test, je tombe sur une fenêtre titrée "Sousse.exe - Point d'entrée introuvable" (no coment sur le nom de mon jeu ok ?) et qui dit exactement :
Citer
Le point d'entrée de procédure _gxx_personality_v0 est introuvable dans la bibliothèque de liens dynamiques C:\Users\Jules\Desktop\C++\Projets SFML\Sousse\bin\Debug\sfml-graphics-d-2.dll

Sachant que j'utilise Code::Blocks 13.12 et GCC 4.9.2 32 bits sur Windows 8.1 64 bits et que :
– Oui, j'ai bien fait gaffe à télécharger la version "GCC 4.9.2 MinGW (DW2) - 32-bit" de SFML, comme je l'avais fait il y a quelques mois avec SFML 2.2 qui fonctionnait très bien.
– J'ai bien fait attention à mettre les .dll de SFML 2.3.1 et pas ceux de la 2.2.
– Il n'y a aucune erreur dans mon linking, les bons chemins sont bien indiqués.
– J'ai mis les bibliothèques dans le bon ordre, à savoir system tout en bas, puis windows juste au dessus, puis graphics, audio, et network au dessus de tout ça.
– J'ai réinstallé Code::Blocks.
– J'ai réinstallé GCC.
– J'ai re-téléchargé SFML 2.3.1.
– J'ai ré-téléchargé SFML 2.2. Et ça me donne la même erreur alors qu'il y a quelques mois il n'y avait aucun problème :(
– J'ai compilé SFML moi-même avec CMake. Pas mieux. Et à savoir que la commande mingw32-make install ne fonctionne pas, il me dit qu'il n'y a aucune ordre avec le nom "install".
– J'ai collé les .dll un peu partout.
– Je n'ai rien trouvé de probant, ni sur ce forum, ni sur le forum anglais, ni sur gogol.
– Mon code est celui du tuto.
– Je connais un mec qui peut avaler douze kilomètres de boudin sans mâcher.

Donc...un peu d'aide ? S'il vous plaît ? Merci d'avance.

Même si je sens que je vais me faire houspiller parce que la solution était sous mes yeux depuis le début mais que je suis un sac :S

5
Graphique / [Résolu] sf::PrimitiveTpe::Quads ?
« le: Avril 20, 2015, 02:06:10 pm »
Bonjour,

J'ai une question à propos du PrimitiveType::Quads. J'ai lu qu'il était déconseiller de l'utiliser car ne fonctionnant pas sur toutes les versions d'OpenGL.
Première chose que je ne comprend pas : quand j'installe SFML, les fonctions OpenGL nécessaires ne sont pas incluses dans les fichiers binaires ou les .dll ? En clair, la fonction d'OpenGL utilisée dépend-elle de la machine et non de ce que j'ai téléchargé sur le site ?

Ensuite, ma question la plus importante : si j'utilise les Quads, que je compile, et que mon exécutable fonctionne sur ma machine, si je donne mon exécutable (et tous les dlls qui vont avec) à quelqu'un d'autre, suis-je assuré que cela fonctionne ou peut-il y avoir un couac à cause de ça ?

Merci d'avance pour vos réponses. S'il vous plaît tenez compte du fait que je ne connais pas du tout OpenGL.

6
Graphique / RenderTexture, draw() et autres questions de ce genre
« le: Mars 30, 2015, 09:17:28 pm »
Bonjour,

J'ai commencé à me mettre sérieusement à la SFML, mais j'avoue que je n'y connais pas grand-chose en OpenGL ni en API graphiques en général. J'ai donc...un certain nombre de  questions :
– Quelle est la réelle utilité de sf::RenderTexture ? Est-ce que faire des calculs sur une RenderTexture, puis récupérer la texture pour la dessiner sur ma RenderWindow est vraiment plus rapide que de le faire directement sur la RenderWindow ?
– Dans le tuto, il est dit que "les performances sont directement liées au nombre d'appels à la fonction draw". Ça veut dire que si je dessine 1000 triangles en un appel, ça ira plus vite que si je dessine 50 fois 2 triangles (donc 100 en tout, mais en 50 appels) ?
– En utilisant les vues, est-ce que utiliser draw() sur une entité qui n'est au final pas visible à l'écran impactera les performances autant que si elle était visible ? Devrais-je faire en sorte de n'appeler draw() que sur les entités qui seront effectivement affichées ?

Et enfin, une question qui n'a pas vraiment de rapport : pourquoi dans le code des exemples y a-t-il un 'f' à la fin des nombres à virgule (enfin à point) ? Par exemple :
minimapView.setViewport(sf::FloatRect(0.75f, 0, 0.25f, 0.25f));
Moi, je n'en met pas, et ça ne me pose pas de problèmes...qu'est-ce que ça change ?


Merci d'avances pour vos réponses.

7
Graphique / Vertex.texCoords
« le: Mars 30, 2015, 06:57:47 pm »
Bonjour,

J'étais en train de travailler avec les vertex quand je me suis demandé : pourquoi faut-il fournir un Vector2f pour les coordonnées de texture ? Est-ce qu'un Vector2i ne serait pas plus logique, de la même manière qu'un sf::Sprite demande un IntRect et non un FloatRect ? En fait, j'ai du mal à imaginer ce que cela signifie : être entre deux pixel de la texture ?...

Merci d'avance pour vos réponses.

8
Audio / Une seule instance de sf::Music ?
« le: Mars 27, 2015, 01:03:53 pm »
J'ai une question :
Je suis actuellement en train de créer un petit jeu vidéo qui possède deux musique : une pour le jeu en lui-même et une pour les menus.
Est-ce une bonne idée de créer une seule instance de sf::Music et d'appeler openFromFile() chaque fois qu'on passe du menu principal au jeu ou inversement, ou devrai-je avoir un sf::Music pour chaque musique ?
Si oui, est-ce nécessaire d'appeler stop() avant de changer de fichier ?

Merci d'avance pour vos réponses.

9
Graphique / [Résolu] Plusieurs petits sprites ou un seul gros ?
« le: Décembre 18, 2014, 03:47:12 pm »
Bonjour,

Je suis en train de faire un petit jeu pour me familiariser avec la SFML. Là, j'étais en train de coder la page des succès, voir le fichier joint.
(ne faites pas attention aux nombres en haut à gauche et au mélange anglais/français)
Et je me demandais, qu'est-ce qui est le mieux pour cette page ? Là je partais avec un sprite par icône de succès (4 donc), un sf::Text pour chaque titre et chaque description plus un pour la titre de la page elle-même.
Seulement, j'ai souvent vu que plus on limitait les appels à draw(), mieux c'était pour les performances. Devrais-je donc garder mon système actuel, ou n'avoir qu'un sprite un peu comme l'image donnée pour n'avoir qu'un appel à draw ?
Sachant que le seul dynamisme de la page est d'afficher un contour vert sur les icônes des succès obtenus, ce qui peut facilement être fait avec un sf::RectangleShape, et une flèche pour revenir au menu principal (qu'on ne voit pas sur l'image que j'ai donnée).
Sachant aussi que pour moi c'est plus simple de faire une seule image toute faite que de placer chaque sf::Sprite et chaque sf::Text là où il faut...

Merci d'avance pour vos réponses.

10
Suggestions de nouvelles fonctionnalités / Support des gifs animés
« le: Novembre 24, 2014, 12:30:41 pm »
Est-il prévu un support des gifs animés ? Actuellement (SFML 2.1), un gif non animé s'affiche correctement, mais un gif animé ne s'affiche pas.
Cette suggestion n'est pas très longue mais je ne vois pas ce qu'il y aurait de plus à dire...

11
Graphique / Le sprite qui ne s'affiche pas
« le: Novembre 21, 2014, 01:39:56 pm »
Bonjour,

J'ai commencé une petite GUI pour la SFML, et là j'en suis à faire un éditeur de ligne, c'est-à-dire une cadre, on clique dedans et on peut y entrer du texte. Ma classe LineEditor n'est pas parfaite (par exemple pour le moment un texte trop long dépasse du cadre), mais elle fonctionne. Sauf quand elle est membre d'une autre classe !
Voici la définition (abrégée) de LineEditor :
(click to show/hide)
(click to show/hide)

(click to show/hide)

(click to show/hide)

Quand j'utilise le 2e code, que j'instancie une MyWindow et que j'appelle sa fonction show(), une fenêtre s'ouvre bien, mais elle reste blanche, le LineEditor n'y apparaît pas, il semble qu'il n'y soit même pas puisqu'il ne réagit pas quand je passe ma souris là où il est supposé être (j'avais ajouté une petite ligne de code qui affichait "focused" dans la console quand ma souris passe sur lui).

J'ai aussi essayé de créer un LineEditor dans la fonction show() (donc non membre de MyWindow) pour remplacer le LineEditor member, et là il est bien affiché, mais ne réagit toujours pas aux évènements. Je ne comprends pas.

Merci d'avance pour vos réponses.

12
Discussions générales / Petite erreur dans la doc de sf::String
« le: Novembre 19, 2014, 05:20:48 pm »
http://sfml-dev.org/documentation/2.1-fr/classsf_1_1String.php
À la fin de la liste des fonctions membres publiques, on peut lire ceci :
 Iterator begin ()
  Return an iterator to the beginning of the string.
 
ConstIterator begin () const
  Return an iterator to the beginning of the string.
 
Iterator end ()
  Return an iterator to the beginning of the string.
 
ConstIterator end () const
  Return an iterator to the beginning of the string.

Oups ?...Je ne pense pas que les fonctions end() retournent un itérateur sur le début de la chaîne ^^
Ça ne gêne pas la compréhension de la doc, mais juste pour signaler cette petite erreur :)

13
Général / À propos de la license
« le: Novembre 04, 2014, 12:16:44 pm »
Bonjour,
J'ai commencé à développer une petite GUI pour la SFML, principalement pour moi-même, mais tant qu'à faire, autant en faire profiter d'autres.
Je pensais donc la distribuer sous license CC-BY-SA. Mais dans la notice qu'on retrouve au début de chacun de vos headers, on trouve la mention : "This notice may not be removed or altered from any source distribution.".
Sachant que je ne distribuerais que mon code (ceux qui seraient intéressés auraient en toute logique déjà installé la SFML), si je met juste un lien vers la licence ( http://sfml-dev.org/license.php ) au lieu de la notice entière, est-ce que ça compte ?
Pour l'instant j'ai mis ça, concernant la SFML :
* About the SFML : copyright (c) 2007-2015 Laurent Gomila (laurent.gom@gmail.com). See :
 * http://sfml-dev.org/license.php
 * for any informations.

Ça suffit ?

14
Fenêtrage / Erreur avec sf::Font et OpenGL
« le: Octobre 10, 2014, 06:06:06 pm »
Bonjour,
Au moment où je quitte mon programme, j'ai une fenêtre qui s'affiche que mon programme a cessé de fonctionner, comme s'il avait planté. Dans les faits ce n'est pas dérangeant puisque je voulais justement quitter le programme, mais ce n'est pas très propre.
Quand j'essaie de debugger, lorsque je quitte le programme, l'erreur suivante s'affiche 6 fois dans la console :
An internal OpenGL call failed in Texture.cpp (95) : GL_INVALID_OPERATION, the specified operation is not allowed in the current state
Mon code :
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

(click to show/hide)
(click to show/hide)

Merci d'avance pour votre aide.

15
Fenêtrage / [Résolu] Problème avec le constructeur de sf::RenderWindow
« le: Octobre 03, 2014, 04:58:57 pm »
Bonjour,
J'ai voulu créer une classe qui gère une RenderWindow (en tant que membre) et ainsi créer un semblant de GUI, mais quand j'essaie d'initialiser la RenderWindow dans la liste d'initialisation, j'ai des erreurs du genre :
undefined reference to `_imp___ZN2sf6StringC1EPKcRKSt6locale'
undefined reference to `_imp___ZN2sf9VideoModeC1Ejjj'
Etc.

J'utilise Code::Blocks 13.12 avec GCC 4.7.1 MinGW.
(click to show/hide)
Et le code :

absWindow.h :
#ifndef ABSWINDOW_H
#define ABSWINDOW_H


#include <SFML/Graphics.hpp>

#include "ButtonsList.h"

namespace glan
{


// A class to handle a window and its buttons and event loop.
// The constructor does NOT show the window. Add window.setVisible(true) in your show() function.

class absWindow : sf::NonCopyable
{
    friend class Button;
    public:
        absWindow(bool destrDeleteButtons = true, \
                  int x = 600, int y = 800, sf::String const& title = "Window");
        // Arguments :
        //
        // x : the height of the window.
        //
        // y : the width of the window.
        //
        // title : the title shown in the title bar of the window.
        //
        // destrDeleteButtons : sets deleteButtons, which defines if the destructor deletes the buttons of the 'buttons' member.

        absWindow(bool destrDeleteButtons = true, \
                  sf::VideoMode const& videoMode = sf::VideoMode(800,600), std::string const& title = "Window");
        // Arguments :
        //
        // videoMode : the video mode of the window.
        //
        // title : the title shown in the title bar of the window.
        //
        // destrDeleteButtons : sets deleteButtons, which defines if the destructor deletes the buttons of the 'buttons' member.

        virtual ~absWindow() = 0;
        // Destructor. If 'resetRect' member is true, deletes all glan::Button in 'buttons' member.


        virtual void show();
        // Shows the window.

        void useBtnsVect(int i = -1);
        // Sets 'btnsVectShown' member at 'i'.

        void close();
        // Closes the window and destroys this.

        virtual void updateDisp();
        // Should call updateButtons().
    protected:
        void updateButtons();
        // Drawn all buttons contained in 'buttons' member at(btnsVectShown), excepts these which are hidden. If buttons[btnsVectShown] is out of range, no button is

        bool deleteButtons;
        int btnsVectShown;
        std::vector<ButtonsList> buttonsLists;
        sf::RenderWindow window;
        sf::Event event;
};

} // namespace glan

#endif // ABSWINDOW_H
 

absWindow.cpp
#include "absWindow.h"

using namespace glan;

absWindow::absWindow(bool destrDeleteButtons, int x, int y, sf::String const& title) : \
    deleteButtons(destrDeleteButtons), btnsVectShown(-1), buttonsLists(), \
    window(sf::VideoMode(x, y), title, sf::Style::Titlebar | sf::Style::Close)
{
    window.setVisible(false);
}

absWindow::absWindow(bool destrDeleteButtons, sf::VideoMode const& videoMode, std::string const& title) :
    deleteButtons(destrDeleteButtons), btnsVectShown(-1), buttonsLists(), \
    window(videoMode, title, sf::Style::Titlebar | sf::Style::Close), event()
{
    window.setVisible(false);
}

absWindow::~absWindow()
{
    if(deleteButtons)
    {
        for(int i(0) ; i < (int)buttonsLists.size() ; i++)
            buttonsLists[i].clear();
    }
}


void absWindow::show()
{
    window.setVisible(false);

    while(window.isOpen())
    {
        updateDisp();
        while(window.pollEvent(event))
        {
            updateDisp();
            if(event.type == sf::Event::Closed)
                window.close();
        }
    }
}

void absWindow::close()
{
    window.close();
    delete this;
}

void absWindow::updateDisp()
{
    window.clear();
    updateButtons();
    // Other drawings...
    window.display();
}

void absWindow::updateButtons()
{
    ButtonsList temp;
    try
    {
        temp=buttonsLists.at(btnsVectShown);
    }
    catch (std::out_of_range const& expt)
    {
        std::cerr<<expt.what()<<std::endl<<"absWindow.cpp::updateButtons()"<<std::endl;
        return;
    }

    for(int i(0) ; i < (int)temp.size() ; i++)
    {
        if(temp[i] != nullptr)
        {
            if(temp[i]->isEnabled())
                temp[i]->checkClicked(event, window);

            if(!temp[i]->isHidden())
                window.draw(*temp[i]);
        }

    }
}
 

Pages: [1] 2 Suivante »