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.
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]
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.
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.
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.
SFML possède des dépendances externes et internes :
Postez dans le forum de SFML.
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.
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.
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).
SFML n'a pas de module permettant de gérer les vidéos.
Oui, vous pourrez trouver des exemples pour Qt, WxWidgets, et les APIs natives Win32 et X11 dans les tutoriels officiels.
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.
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.
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.
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”.
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'
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.
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).
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.
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 :
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.