ゲームプログラミングに役立ちそうなマルチメディアライブラリです。
画像、音声、キー入力検知、ネットワークなどをシンプルなコードで扱うことができます。
【マルチプラットフォーム】
Windows、Linux、Mac など、いろいろな OS で使うことができます。
【マルチランゲージ】
基本的には C++ですが、C言語や.NET等、さまざまなプログラム言語でも使うことができます。
公式サイト
公式サイトのチュートリアル(英語)
うちで訳したチュートリアル(日本語・非公式)
SFMLは "Simple and Fast Multimedia Library" の略です。
つまりシンプルでファーストなマルチメディアライブラリ、ということですね。「ということ」って、どういうことでしょう?
公式サイトの 「
Contribution Guidelines(お手伝い募集要綱)」
の中に SFML の方針が端的に書かれた箇所がありました。(SFMLはオープンソースなので、お手伝いを募集してるわけです)
(引用)
Contributions must fit into one of the following SFML modules:
- System
- Window
- Graphics
- Audio
- Network
That clearly rules out anything specifically related to game development. Such counterexamples are:
Physics, collision detection/response, AI, path finding, 3D abstraction layer (like the current graphics module), file system, etc.
There are several reasons why SFML does not support these features:
- The API should be focused and of high quality.
Instead of implementing a lot of features that are possible and sometimes even simple to implement,
we consider it important that people have a clear view of what this library provides.
- For most of the listed points, there are existing libraries that have been developed over years and provide everything you need.
- Resources are limited.
The time we would invest into other features can be used to improve and extend the existing multimedia library.
- How these features could be provided is controversial.
Many of them are very specific and concrete implementations are often limited to a few use cases.
- Many features can be added as an extension.
SFML works as an abstraction of low-level and platform-specific functionality to provide a portable API.
Higher-level features do not have this requirement.
(抄訳)
SFML は下記の5つのモジュールで構成されてるので、お手伝いもその範囲でお願いします:
- システム
- ウィンドウ
- グラフィックス
- オーディオ
- ネットワーク
ゲームプログラミングに限定されてしまうような機能は除外されてることに注意!
例えば「物理エンジン」「衝突判定」「AI」「経路探索」「3D抽象化レイヤー(既存の機能の3D版のような)」「ファイルシステム」等々。
SFML がそうした機能をサポートしないのには理由があります。
-
API とは目的がハッキリしていてハイクオリティであるべきです。
機能を多く詰め込むことよりも、「SFML とはどんなライブラリであるのか?」が一目瞭然であることを優先しています。
-
上で挙げたような機能については世の中に老舗のライブラリが既に出回っています。必要ならそちらを使うとよいです。
-
人生は有限です。新たな機能を追加するよりは既存の機能を改善・拡張することを優先しています。
-
上記のような機能をどんな実装にするのか? 議論が分かれるところです。
機能が特定の用途に限定されすぎているのが問題です。応用が利かない。使い道が少ない。
-
SFMLがサポートしなくても、必要ならプログラマーが自分で拡張機能として好きなように追加できます。
SFML はコンピューターの裏側の細かい事情や OS ごとの違いを吸収した縁の下の力持ちとして活躍します。
その結果、小回りの利く API が提供できる。縁の上のアイドルはみんなの人気者ですが、そうした地味な役回りは苦手です。
SFML がどういう方針で開発されているのか、ここからいろいろと読み取ることができますね。
基本的にはゲーム開発向けを謳っているようですが、しかしゲームプログラミングに限定されるような機能を直接はサポートしない。
基本的な機能だけのシンプルなAPIを提供し、後はプログラマーに任せる。縁の下の煩雑なことを引き受けて、プログラマーの自由な開発を舞台裏から支援する。そういう存在を目指して作られているライブラリと言えるでしょう。
つまり高機能でありながら汎用的で小回りの利く、まさにシンプルかつファーストなマルチメディアライブラリですね。