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 - virelio

Pages: [1]
1
Graphique / [résolu] SFML 2.2 - sf::Text - setString("")
« le: Janvier 18, 2015, 12:47:00 pm »
Bonjour,

Je suis passé de SFML 2.1 à la dernière mouture. J'ai une erreur à l'exécution que je n'avais pas avant:
#include <iostream>
#include <SFML/Graphics.hpp>

using namespace std;

int main()
{
    sf::RenderWindow app(sf::VideoMode(800,600,32),"sf::String manipulation");

    app.setVerticalSyncEnabled(true);

    sf::Font arial;
    if (!arial.loadFromFile("arial.ttf")) return -2;

    sf::Text text;
    text.setFont(arial);
    text.setString("");
    text.setPosition(200,300);

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

        app.clear(sf::Color::Blue);

        app.draw(text);

        app.display();
    }

    return EXIT_SUCCESS;
}
 

Le fait de mettre text.setString(""); fait planter l'application.

Le simple fait de déclarer
 sf::String s;
et de ne pas l'utiliser fait également planter l'application à la fermeture.

Que se passe-t-il ? Auparavant, l'on pouvait afficher un sf::Text comprenant une sf::String vide ce qui évitait des tests nombreux.

J'ai compilé SFML à partir des sources grâce à la dernière version mingw de Nuwen (11.6 avec GCC 4.8.2)

2
J'utilise le code ci-dessous pour centrer une lettre sur la position demiL, demiH.
Le centrage horizontal est correct mais le centrage vertical est mauvais et différent selon que la lettre est ronde (O, Q C) ou non.

    sf::Glyph glyph = myFont.getGlyph( (sf::Uint32)myString[0], myText.getCharacterSize(), false);
    sf::IntRect r = glyph.bounds;
    myText.setPosition(demiL - (r.width - r.left)/2 - r.left, demiH + (r.top - r.height)/2 );

Quelle est la bonne méthode et à quoi correspond, du point de vue position r.top et r.left (r = glyph.bounds)

Assouan:
Citer
Pourquoi ne pas simplement faire :

myText.setPosition(demiL - (myText.setGlobalBounds().width / 2), demiH - (myText.getGlobalBounds().height / 2));

Ceci ne centre pas les lettres car le point d'origine de chaque lettre lui est propre afin d'assurer leur alignement horizontal sur "la ligne de base".

Pages: [1]
anything