Questions fréquemment posées

Général

Qu'est ce que la SFML ?

SFML est une API portable et facile à utiliser, écrite en C++. Vous pouvez la voir comme une alternative orientée objet à la SDL. SFML est composée de nombreux modules pour coller parfaitement à vos besoins. Vous pouvez utiliser la SFML en tant que système de fenêtrage minimal pour s'interfacer avec OpenGL, ou en tant que bibliothèque multimédia riche en fonctionnalités pour construire des jeux vidéo ou des programmes interactifs.

Vous pourrez trouver une présentation plus spécifique des fonctionnalités sur cette page.

Sur quelles plateformes SFML est-elle disponible ?

SFML est, à l'heure actuelle, entièrement fonctionnelle sous les systèmes Windows (Vista, XP, 2000, 98) ainsi que sous Linux. Un port de la version actuelle vers MacOS est en cours. SFML fonctionne sans problème sur les systèmes 32 bits et 64 bits. [à compléter]

Pour quels langages SFML est-elle disponible ?

Le langage d'origine de SFML est le C++. Cependant, de nombreux bindings vers d'autres langages ont vu le jour et permettent aujourd'hui à SFML d'être utilisée en C, D, Ruby et Python. Un binding .Net (C#, C++/CLI, VB.Net, …) est également en cours de développement.

Quelle est la licence associée à SFML ?

SFML est sous licence zlib/png. Vous pouvez utiliser SFML pour un projet open-source ou propriétaire, payant ou commercial. Si vous utilisez SFML dans un de vos projets, une indication concernant la SFML serait appréciée, mais n'est en rien obligatoire.

Concernant les bibliothèques externes utilisées par SFML, seules sndfile et OpenAL sont sous licence LGPL d'où leur utilisation en tant que bibliothèques dynamiques.

Comment obtenir les dernières versions de développement de SFML ?

Les versions de développement de la SFML sont régulièrement mises à jour sur le dépôt SVN. Pour les récupérer, vous pouvez suivre le tutoriel présent ici. Gardez à l'esprit que ces versions de SFML sont des versions de développement et donc doivent être considérées comme instables.

Quelles sont les dépendances de la SFML ?

SFML possède des dépendances externes et internes :

Où puis-je poser des questions ?

Postez dans le forum de SFML.

J'ai un bug !

Postez dans le forum du package en question, n'oubliez pas de fournir le descriptif précis de votre erreur, de la version de SFML que vous utilisez, de votre système, du code compilable, si besoin est, ainsi que les logs de votre compilateur et/ou linker.

J'ai une fonctionnalité à proposer !

Avant toute chose, vérifiez sur la roadmap si la fonctionnalité n'a pas déjà été prévue voire implémentée. Ensuite, il existe une rubrique du forum dédiée à ces demandes. Pensez à faire une recherche avant de poster, et gardez à l'esprit que la SFML est une bibliothèque multimédia multi-plateformes, ainsi peu de chances qu'un module de gestion de XML, de base de données ou encore une fonction trop spécifique à un système voie le jour.

Utilisation

La SFML possède-t-elle un package GUI ?

A l'heure actuelle, la SFML ne possède pas de package GUI. Vous pouvez cependant utiliser toute bibliothèque externe basée sur OpenGL, telle que CEGUI ou Guichan. La fonctionnalité est prévue dans la SFML à long terme. A noter enfin, qu'il existe un projet soutenu par des utilisateurs de la SFML visant à intégrer un package GUI (voir cette entrée).

Est-ce que je peux lire des vidéos avec la SFML ?

SFML n'a pas de module permettant de gérer les vidéos.

Peut-on interfacer SFML avec une bibliotheque de GUI ?

Oui, vous pourrez trouver des exemples pour Qt, WxWidgets, et les APIs natives Win32 et X11 dans les tutoriels officiels.

Quels sont les formats audios supportés par SFML ?

Le module Audio sait gérer les formats Wav, Ogg, ainsi que les formats gérés par libsndfile. Concernant le MP3, il est soumis à une licence de Thompson Multimédia. En raison de ceci, son support n'est pas inclus dans la SFML. Pour plus d'informations concernant la licence MP3, voir http://www.mp3licensing.com.

Quels sont les formats d'image supportés par SFML ?

Le chargement des images est assuré par une bibliothèque externe : SOIL. Elle supporte le chargement des formats les plus courants (BMP, TGA, PNG, JPEG, DDS et PSD). Voir cette page pour plus d'informations concernant cette bibliothèque.

L'unicode est-il pleinement supporté par SFML ?

SFML supporte parfaitement la saisie et l'affichage de chaînes internationales, via l'encodage unicode UTF-16. La saisie est assurée par l'évènement sf::Event::TextEntered, et l'affichage est assuré par la classe sf::String.

Je n'arrive pas à utiliser SFML

Tout d'abord assurez vous d'avoir suivi les tutoriels officiels concernant l'installation de la SFML.

Avez-vous :

Si malgré tout ça, SFML s'obstine à ne pas vouloir fonctionner, voir “j'ai un bug”.

Problèmes

[CodeBlocks / Windows] J'ai recompilé la version statique de SFML et j'ai des erreurs d'édition de liens.

MinGW n'inclut pas les bibliothèques externes lors de la compilation statique, ainsi vous devrez les rajouter après la compilation, ou bien les lier directement à votre projet.

Pour fusionner deux bibliothèques, vous pouvez utilisez l'outil ar.exe fourni avec MinGW. Vous aurez également besoin d'un environnement Unix minimal (comme CYGWIN). La syntaxe est celle ci :

ar xv lib1.a | cut -f3 -d ' ' | xargs ar rvs lib2.a

Voici les commandes pour fusionner l'ensemble des dépendances externes :

ar xv libgdi32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-window-s-d.a && rm *.o && echo 'done'
ar xv libgdi32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-window-s.a && rm *.o && echo 'done'
ar xv libopengl32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-window-s-d.a && rm *.o && echo 'done'
ar xv libopengl32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-window-s.a && rm *.o && echo 'done'
ar xv libwinmm.a | cut -f3 -d ' ' | xargs ar rvs libsfml-window-s-d.a && rm *.o && echo 'done'
ar xv libwinmm.a | cut -f3 -d ' ' | xargs ar rvs libsfml-window-s.a && rm *.o && echo 'done'
ar xv libws2_32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-network-s-d.a && rm *.o && echo 'done'
ar xv libws2_32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-network-s.a && rm *.o && echo 'done'
ar xv libfreetype.a | cut -f3 -d ' ' | xargs ar rvs libsfml-graphics-s-d.a && rm *.o && echo 'done'
ar xv libfreetype.a | cut -f3 -d ' ' | xargs ar rvs libsfml-graphics-s.a && rm *.o && echo 'done'
ar xv libopenal32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-audio-s-d.a && rm *.o && echo 'done'
ar xv libopenal32.a | cut -f3 -d ' ' | xargs ar rvs libsfml-audio-s.a && rm *.o && echo 'done'
ar xv libsndfile.a | cut -f3 -d ' ' | xargs ar rvs libsfml-audio-s-d.a && rm *.o && echo 'done'
ar xv libsndfile.a | cut -f3 -d ' ' | xargs ar rvs libsfml-audio-s.a && rm *.o && echo 'done'

[CodeBlocks] J'ai des erreurs d'édition de liens

Avec MinGW, vous devez lier les bibliothèques dans le bon ordre : Si libX dépend de libY alors libX doit être liée avant libY. Par exemple, si vous utilisez le module Graphics et Audio, l'ordre de linkage sera le suivant : sfml-audio, sfml-graphics, sfml-window, sfml-system.

Si vous utilisez la version dynamique des bibliothèques SFML, vous devez également définir le symbole SFML_DYNAMIC dans les options de votre projet. Pour plus de détails, n'hésitez pas à consulter le tutoriel d'installation pour Code::Blocks.

[Windows] Pourquoi une console s'affiche-t-elle dans mon projet ?

Sous windows, si vous compilez votre projet, vous aurez une console qui s'affichera derrière votre fenêtre. Pour éviter cela, il faut créer un projet de type Console, puis :

Pour garder un point d'entrée (main) portable, vous pouvez lier votre programme avec la bibliothèque sfml-main.lib. Sinon, vous serez obligé de redéfinir le point d'entrée, qui ne sera plus int main(void) ou int main(int argc, char** argv), mais int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow).

Mon sprite ne s'affiche pas, il n'y a qu'un carré blanc !

La cause de ce problème est en général la destruction prématurée de l'image que le sprite utilise. En effet, un sprite ne fait que pointer vers une image externe, vous devez donc garder celle-ci en vie tant que le sprite en aura besoin.

Veillez également à mettre à jour vos sprites lorsque leurs images sont copiées ou déplacées en mémoire.

[Windows / Visual Studio] Mon projet plante aléatoirement et pourtant je n'ai aucune erreur de compilation ou de linker.

Assurez vous de lier la version des bibliothèques correspondant à votre projet : Si vous compilez en Debug, vous devez lier avec les versions Debug de la SFML et vice-versa pour la configuration Release. Pour rappel, les conventions de nommage des bibliothèques SFML sont :

Si vous lier avec les versions DLL, vous devez copier à coté de votre executable, les DLLs requises :

[Linux Debian] Je n'arrive pas à compiler les sources.

Avant toute chose, pensez à vérifier que les paquets suivants sont bien installés :

Si vous voulez compiler la version 1.3, il vous faudra rajouter

#include <string.h>

dans les headers Packet.hpp du module Network et SoundFileDefault.cpp de Audio.

Si vous utilisez les versions svn, pensez à faire un make clean avant la compilation pour éviter des problèmes.