多媒体开发库-SFML
2023-12-29 11:06:26 阿炯

SFML(Simple and Fast Multimedia Library)提供了一种简单且高效的方式来创建富有活力的游戏和多媒体应用程序。可以使用 OpenGL 的硬件加速 2D 图形,而且还提供多种相关的方法到不同类型的媒体,如字体、音频等。使用C++开发的单和快速的多媒体库,采用Zlib协议授权,并为近23种语言提供了绑定。


它是一个免费的、开源的、跨平台的多媒体开发库,用于开发2D游戏和其他多媒体应用,首发于2007年8月。提供了一系列底层的、可以直接操作图形硬件、音频硬件和网络的API,同时它也提供了一些高级功能,比如窗口管理、用户输入和矢量图形等。用于制作游戏甚至游戏引擎,尽管 SFML 不支持 3D 渲染,但它仍用于创建上下文。由于 OpenGL 无法创建窗口,因此 3D 图形程序员(至少大部分时间)使用 SFML 来完成任务。


核心功能:

窗口管理:提供了创建和管理窗口的接口,允许你创建自定义的游戏窗口,处理窗口事件,以及进行全屏和窗口模式之间的切换。

2D图形:提供了丰富的2D图形功能,包括绘制形状,精灵,文本和纹理等。你可以通过简单的API接口来创建炫酷的2D效果。

音频处理:也支持音频处理,包括播放音效,音乐,以及声音录制等。

网络编程:还包含了网络编程的功能,提供了TCP和UDP的接口,方便你制作多人在线游戏。

用户输入:能够处理用户的键盘、鼠标和游戏手柄输入,方便你创建出互动性强的游戏。

跨平台支持:支持Windows,Linux和Mac OS等平台,你可以只编写一次代码,就可以在多个平台上运行。


SFML的设计目标是简单和快速,它提供了直观易懂的接口,让你可以更加专注于游戏的逻辑和内容,而不是底层的技术细节。同时SFML也允许直接使用OpenGL的接口,如果需要的话。

总的来说,SFML是一个强大的多媒体开发库,它可以帮助你快速创建出美观、有趣和富有创意的游戏。无论是一名游戏开发的初学者,还是一个有经验的开发者,SFML都是一个值得深入学习和使用的库。在SFML中,创建窗口只需要一行代码:

#include <SFML/Graphics.hpp>

int main(){
    sf::Window window(sf::VideoMode(200, 200), "HUANGCHENGTAO!");  //创建窗口代码
    sf::sleep(sf::seconds(3)); //添加此代码 这样我们就可以创建窗口之后,运行代码可以看到窗口,否则不可以
    return 0;
}

1.main函数唯一做的是通过调用sf :: Window构造函数初始化窗口变量,之后程序退出。 还可以使用默认构造函数打开一个窗口,然后调用window::create()该函数,这个函数的参数与构造函数的参数完全相同。如果在已经打开的窗口上调用Window::create ( ),它会关闭窗口并用新的一组参数重新初始化该窗口。

2.注意:Window 和 VideoMode 都在sf命名空间中。SFML中的每个类都位于该命名空间之下,该命名空间将SFML中的所有类与其他库中的类区分开。

如果运行示例中的代码,就不会看到太多内容。程序在创建窗口后立即退出。这是因为我们只是创建了一个窗口,而没有对它做任何操作,程序在main()方法结束后自然退出。事实上创建了一个窗口,这并不意味着它可以完全正常工作(至少现在还没有)。必须根据我们想要它做的事情来对它进行编程。现在通过延迟窗口的线程来阻止main函数完成。SFML为此提供了一个简单的接口;只需在创建窗口的行之后添加sf::sleep(sf::seconds(3))。现在窗口在睡眠期间是清晰可见的。

3.可以在创建窗口时指定各种配置—— window size, title, style, and graphics settings. 您可能已经注意到我们将两个参数传递 给 Window构造函数 -—— 一个VideoMode实例和一个字符串(标题)。 构造函数实际上最多可以使用四个参数,最后两个是可选的 – Style 和ContextSettings。

更多的开发参考可查看《SFML 入门》。

SFML 相对于其他多媒体库的优势:
免费和开源的(与闭源的 DirectX 或专有的 Metal 不同)
跨平台可让它可以在 Windows、Linux/Unix、Mac 上运行,并且已经在进行实验以使其在 Android 和 iOS 上具有可移植性(与其他图形库如 Windows API 等仅支持单个平台)
与某些图形 API 甚至无法达到 500fps 相比,用它开发的应用程序大部分时间将以每秒数千帧的速度运行!
可以使用 Python 甚至 GoLang 创建相同的东西!也就是说SFML提供了几种主流语言的官方绑定。大多数图形 API 几乎不提供一种以上的语言绑定,而 SFML 提供了十多种不同编程语言的绑定!

一些缺点:
SFML 不能做 3D!SFML 严格编写为提供的低级硬件加速 2D 图形渲染,对于3D应用可能必须将其与 OpenGL 结合使用。
没有对 Android 和 iOS 的坚定支持!尽管正在进行实验,但目前还没有对它俩或其他移动平台的可靠支持。

CSFML 则是 SFML 的绑定库,为开发者提供了更加便捷的方式来使用 SFML 的功能。其同样遵循 Zlib 许可协议,这使得开发者可以在各种项目中自由地使用它。这个绑定库将 SFML 的 C++ 接口转换为 C 语言接口,让那些熟悉 C 语言的开发者也能够轻松地利用 SFML 的强大功能来创建精彩的游戏和多媒体应用。它为开发者提供了丰富的功能,包括图形渲染、音频处理、窗口管理等。通过它开发者可以轻松地创建窗口、绘制图形、播放音频等,为游戏和应用程序增添生动的视觉和听觉效果。

例如,开发者可以使用 CSFML 的图形渲染功能来创建精美的游戏场景。通过简单的 API 调用,就可以绘制各种形状、图像和文本,为游戏打造出独特的视觉风格。同时,CSFML 的音频处理功能可以让开发者轻松地添加背景音乐和音效,增强游戏的沉浸感。为了进一步提升 CSFML 的功能和灵活性,开发者可以适当增加代码。比如,可以添加自定义的图形效果,通过修改渲染管道来实现独特的视觉效果。或者扩展音频处理功能,支持更多的音频格式和效果。还可以利用 CSFML 的可扩展性,与其他库和工具进行集成。例如,可以将 CSFML 与物理引擎库结合使用,为游戏添加真实的物理效果。或者与网络库集成,实现多人在线游戏功能。


最新版本:2.6


官方主页:https://www.sfml-dev.org/