SFML - Partie 10 - Texte et police

Cet article appartient à une série de tutoriels dédiés à SFML. Le lecteur est invité à se référer aux autres sections de ce tutoriel en suivant ce lien : SFML tutoriel.

Introduction

Cette page explique comment afficher du texte avec SFML. L'exemple présenté sur cette page a été réalisé avec les versions suivantes :

Cette vidéo vous donne un aperçu du résultat :

Exemple et code source

Cet exemple montre comment afficher du texte en SFML.

/*!
 * \file    main.cpp
 * \brief   start SFML in full screen and display a sprite (http://www.lucidarme.me/?p=6127)
 * \author  Philippe Lucidarme
 * \version 1.0
 * \date    12/18/2016
 */

// SFML libraries
#include <SFML/Graphics.hpp>
#include <iostream>

int main()
{
    // _____________________
    // ::: Create window :::

    // Create a window with the same pixel depth as the desktop
    sf::VideoMode desktopMode = sf::VideoMode::getDesktopMode();

    sf::RenderWindow window(sf::VideoMode(  desktopMode.width,
                                            desktopMode.height,
                                            desktopMode.bitsPerPixel),
                            "SFML part 3",
                            sf::Style::Fullscreen);

    // Enable vertical sync. (vsync)
    window.setVerticalSyncEnabled (true);

    // _________________
    // ::: Load font :::

    sf::Font font;
    if (!font.loadFromFile("../example_font.ttf"))
    {
        std::cerr << ".Error while loading font" << std::endl;
        return -1;
    }

    sf::Text text;
    text.setFont(font); // font est un sf::Font
    text.setString(L"www.lucidarme.me");
    text.setCharacterSize(60); // exprimée en pixels, pas en points !
    text.setColor(sf::Color::Black);
    text.setOrigin(text.getLocalBounds().width/2. , text.getLocalBounds().height/2.);

    std::cout << text.getLocalBounds().width << "\t" << text.getLocalBounds().height;
    // _________________
    // ::: Main loop :::

    sf::Clock timer;
    while (window.isOpen())
    {
        // Process events
        sf::Event event;
        while (window.pollEvent(event))
        {
            // Close the window if a key is pressed or if requested
            if (event.type == sf::Event::Closed) window.close();
            if (event.type == sf::Event::KeyPressed) window.close();
        }

        // Clear the window and apply grey background
        window.clear( sf::Color(127,127,127));
        text.setPosition(window.getSize().x/2. , window.getSize().y/2.);
        window.draw(text);
        // Update display and wait for vsync
        window.display();
    }
    return 0;
}

Téléchargement

Les fichiers et les codes sources peuvent être téléchargés depuis GitLab :

Code source sur GitLab

Voir aussi


Dernière mise à jour : 15/03/2021