SFML下载和安装教程(附安装包)
SFML 是 “Simple and Fast Multimedia Library” 的缩写,一套用 C++ 编写的跨平台多媒体库,诞生于 2007 年,由 Laurent Gomila 发起并持续维护,完全免费。
SFML 把窗口管理、2D 图形、音频播放、网络通信与系统工具封装成五个独立模块,开发者按需链接即可在 Windows、macOS、Linux 甚至 Android 上快速构建游戏或图形应用,被社区视为 “轻量级 DirectX”。
与 SDL 相比,SFML 的 API 更高层,学习曲线平缓;与 Unity 相比,它体积仅数 MB,无需虚拟机,适合追求原生性能与可控性的项目。
SFML 的核心特性包括:
SFML 的典型场景涵盖高校游戏课程原型、2D 独立游戏、数据可视化演示、交互式艺术装置、嵌入式图形界面、科研仿真与 CTF 动画效果。
1) 从网盘中下载 MSVC 版本预编译包 SFML-3.0.2-windows-vc17-64-bit.zip,解压后的文件夹中包含 include(头文件)、lib(库文件)和 bin(动态链接库DLL)。
2) 配置 VS2022 项目属性:
① 创建空 C++ 项目。
② 打开项目属性页,选择 C/C++ 中的常规选项,再配置附加包含目录,添加 SFML 里 include 文件夹的路径。
③ 还是在项目属性页,选择链接器中的常规选项,配置附加库目录,添加 SFML 里 lib 文件夹的路径。
④ 还是在项目属性页,进入链接器中的输入选项,配置附加依赖项:
⑤ 最后将 SFML 文件夹中 bin 文件夹下所有的 dll 文件复制到项目源码文件夹下。
测试一下,在新建的源文件里输入以下代码:
SFML 把窗口管理、2D 图形、音频播放、网络通信与系统工具封装成五个独立模块,开发者按需链接即可在 Windows、macOS、Linux 甚至 Android 上快速构建游戏或图形应用,被社区视为 “轻量级 DirectX”。
与 SDL 相比,SFML 的 API 更高层,学习曲线平缓;与 Unity 相比,它体积仅数 MB,无需虚拟机,适合追求原生性能与可控性的项目。
SFML 的核心特性包括:
- 面向对象封装,无需繁琐初始化即可创建窗口与渲染循环;
- 底层默认使用 OpenGL 进行硬件加速,同时暴露原生上下文供进阶用户调用;
- 图形模块支持精灵、纹理、着色器、帧缓存对象与矢量绘制,可轻松实现粒子、瓦片地图与 GUI;
- 音频模块提供 WAV、OGG、FLAC、MP3 流媒体播放与 3D 音效;
- 网络模块封装 TCP、UDP 与 HTTP,方便编写客户端或局域网对战;
- 系统模块提供时钟、线程、互斥量、文件抽象,为多线程游戏逻辑奠定基础。
SFML 的典型场景涵盖高校游戏课程原型、2D 独立游戏、数据可视化演示、交互式艺术装置、嵌入式图形界面、科研仿真与 CTF 动画效果。
下载SFML
这里为大家提供了 SFML 最新版的安装包:网盘里包含了 GCC、MSVC 和 Clang 多个平台的 SFML 安装包:

安装SFML
接下来以 Windows 的 VS 为例,讲解如何安装配置 SFML。1) 从网盘中下载 MSVC 版本预编译包 SFML-3.0.2-windows-vc17-64-bit.zip,解压后的文件夹中包含 include(头文件)、lib(库文件)和 bin(动态链接库DLL)。
2) 配置 VS2022 项目属性:
① 创建空 C++ 项目。
② 打开项目属性页,选择 C/C++ 中的常规选项,再配置附加包含目录,添加 SFML 里 include 文件夹的路径。
③ 还是在项目属性页,选择链接器中的常规选项,配置附加库目录,添加 SFML 里 lib 文件夹的路径。
④ 还是在项目属性页,进入链接器中的输入选项,配置附加依赖项:
sfml-graphics.lib
sfml-window.lib
sfml-system.lib
sfml-audio.lib
sfml-network.lib
⑤ 最后将 SFML 文件夹中 bin 文件夹下所有的 dll 文件复制到项目源码文件夹下。
测试一下,在新建的源文件里输入以下代码:
#include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); window.draw(shape); window.display(); } return 0; }如果能在新创建的窗口中绘制一个绿色的圆形的话则证明配置成功。
