まず、ダウンロードのページから SFML の SDK をダウンロードしてね。
SFML は SFMLで、分けておくのがよさげです。違うバージョンのを共存させられるようにもなるし、その方がいい感じですよね?
アプリケーションの種類は何がいいかな?
もちろん「Win32 アプリケーション」だよね。コンソールが欲しかったら「コンソールアプリケーション」でもいいのかも。
あと「空のプロジェクト」をチェックしておくと、自動生成される鬱陶しいコードに悩まされなくて済むよ。
じゃあ、そんなわけで、「main.cpp」というファイルをプロジェクトに作ってください。 なんでかって? チュートリアルなんで、黙って言うこと聞いてください。
(これで、VisualStudio が 「C++のプロジェクトなんだ(C言語じゃなく)」と理解してくれます)
では、SFMLのヘッダーとライブラリのパスを設定しましょう。
(ヘッダーは .hppのファイル、ライブラリは .lib のファイルです)
プロジェクトのプロパティ設定画面を開いて、下記のように設定します。
・ヘッダーファイルを置いたフォルダを登録:
C++ > 全般 > 追加のインクルードディレクトリ
・ライブラリを置いたフォルダを登録:
リンカー > 全般 > 追加のライブラリディレクトリ
上記2つのパスはデバッグモードでもリリースモードでも同じです。
なので、構成を「全ての構成」にした状態で設定しても問題なしです。
次のステップ。
ライブラリをリンクしましょう。
SFMLには5つのモジュールがあります。
(システム、ウィンドウ、グラフィックス、オーディオ、ネットワーク)
各モジュールごとに、1つずつ libファイルがあります。
設定は「リンカー > 入力 > 追加の依存ファイル」に書き込みます。
アナタが使いたい機能のモジュールのライブラリをリンクしてね。
実行時にDLLが必要なのがイヤだったら、スタティック版のを使ってください。 ファイル名に「-s」がついているやつがスタティック版です。
スタティック版を使う場合は、もう1つ設定が必要です。
プリプロセッサの設定に「SFML_STATIC」マクロを追加してください。
C/C++ > プリプロセッサ > プリプロセッサの定義
SFML の各モジュールが依存しているライブラリの一覧表です。
デバッグビルド用の SFMLモジュールはモジュール名の後ろに "-d" をつけてね(上記参照)。
上の表を見て気付いたかもですが、SFML のモジュール同士で依存し合ってたりもします。 例えば、sfml-graphics-s.lib は sfml-window-s.lib と sfml-system-s.lib に依存してます。 SFML をスタティックリンクで使うときには、使おうとしているモジュールの依存ライブラリだけでなく、 「依存ライブラリの依存ライブラリ」 もリンクするように気をつけてください。依存関係の連鎖がどこかで切れてるとリンカーエラーになってしまいます。
ちょっとわかりにくかったかな? でも心配ない! スタティックリンクの話でビギナーが混乱するのはいたってノーマルなことです。 実際にやってみて、一回でうまくいかなくても、ここで読んだことを心に留めて何回もトライしよう! どうしてもうまくいかないときは FAQ や フォーラムをチェックだ。
ダイナミックリンクライブラリとスタティックリンクライブラリの違いをご存知じゃないキミは、 検索エンジンに聞いてみてね。
そんなわけで設定完了だよ! レッツ動作確認!
main.cpp ファイルに、下記のサンプルを入力してね。
さて、ビルドの前に sfml-main モジュールをリンクしてくださいませ。 やり方は他のモジュールのときと同じです。 (デバッグモードなら sfml-main-d.libを、リリースモードなら sfml-main.lib をリンク)
ではビルドしてみましょう。ダイナミックリンクライブラリを使ってる場合は DLLを実行ファイルと同じフォルダに置くのを忘れないでね。 (DLLファイルは SFMLを解凍したフォルダの「bin」に入ってるよ)
ビルドが終わったら実行。問題なければ、↓のように表示されるはずだよ。
最後に、オーディオモジュール(sfml-audio)を使うときの注意点です。
オーディオモジュールは、さらに別の外部ライブラリを使ってます。 なので、オーディオモジュールを使うときには、そのライブラリも一緒に入れてあげないといけません。
(スタティックリンクのときも、ダイナミックリンクのときも同じ)
必要なファイルは「libsndfile-1.dll」と「OpenAL32.dll」です。
SFMLを解凍したフォルダの「bin」に入ってます。
実行ファイルと同じフォルダにコピーしてあげてください。
あなたの使ってる VisualStudioのバージョンに合うパッケージをダウンロードしてね。
じゃないとコンパイルできないよ。
もし、合うバージョンがないときは、SFML自体を自力でコンパイルしてね。
ダウンロードできた? じゃあ、好きな場所に解凍するといいよ。
ちなみに、ヘッダーとライブラリを、VsualStudioをインストールしてある場所に直接入れるのはおススメできませんです。SFML は SFMLで、分けておくのがよさげです。違うバージョンのを共存させられるようにもなるし、その方がいい感じですよね?
アプリケーションの種類は何がいいかな?
もちろん「Win32 アプリケーション」だよね。コンソールが欲しかったら「コンソールアプリケーション」でもいいのかも。
あと「空のプロジェクト」をチェックしておくと、自動生成される鬱陶しいコードに悩まされなくて済むよ。
じゃあ、そんなわけで、「main.cpp」というファイルをプロジェクトに作ってください。 なんでかって? チュートリアルなんで、黙って言うこと聞いてください。
(これで、VisualStudio が 「C++のプロジェクトなんだ(C言語じゃなく)」と理解してくれます)
では、SFMLのヘッダーとライブラリのパスを設定しましょう。
(ヘッダーは .hppのファイル、ライブラリは .lib のファイルです)
プロジェクトのプロパティ設定画面を開いて、下記のように設定します。
・ヘッダーファイルを置いたフォルダを登録:
C++ > 全般 > 追加のインクルードディレクトリ
・ライブラリを置いたフォルダを登録:
リンカー > 全般 > 追加のライブラリディレクトリ
上記2つのパスはデバッグモードでもリリースモードでも同じです。
なので、構成を「全ての構成」にした状態で設定しても問題なしです。
次のステップ。
ライブラリをリンクしましょう。
SFMLには5つのモジュールがあります。
(システム、ウィンドウ、グラフィックス、オーディオ、ネットワーク)
各モジュールごとに、1つずつ libファイルがあります。
[モジュールと Libファイルの対応表] | ||||
モジュール | デバッグ(DLL) | デバッグ(スタティック) | リリース(DLL) | リリース(スタティック) |
システム | sfml-system-d.lib | sfml-system-d-s.lib | sfml-system.lib | sfml-system-s.lib |
ウィンドウ | sfml-window-d.lib | sfml-window-d-s.lib | sfml-window.lib | sfml-window-s.lib |
グラフィクス | sfml-graphics-d.lib | sfml-graphics-d-s.lib | sfml-graphics.lib | sfml-graphics-s.lib |
オーディオ | sfml-audio-d.lib | sfml-audio-d-s.lib | sfml-audio.lib | sfml-audio-s.lib |
ネットワーク | sfml-network-d.lib | sfml-network-d-s.lib | sfml-network.lib | sfml-network-s.lib |
設定は「リンカー > 入力 > 追加の依存ファイル」に書き込みます。
アナタが使いたい機能のモジュールのライブラリをリンクしてね。
デバッグモードとリリースモードとで、リンクするLibファイルが異なります。
「sfml-モジュール名-d.lib」というファイルはデバッグ用。
「sfml-モジュール名.lib」というファイルはリリース用です。
上記掲載の対応表をよく見てね。混ぜるな危険!
上の表にもあるように、ライブラリにはDLL版とスタティック版があります。「sfml-モジュール名-d.lib」というファイルはデバッグ用。
「sfml-モジュール名.lib」というファイルはリリース用です。
上記掲載の対応表をよく見てね。混ぜるな危険!
実行時にDLLが必要なのがイヤだったら、スタティック版のを使ってください。 ファイル名に「-s」がついているやつがスタティック版です。
スタティック版を使う場合は、もう1つ設定が必要です。
プリプロセッサの設定に「SFML_STATIC」マクロを追加してください。
C/C++ > プリプロセッサ > プリプロセッサの定義
SFML2.2 からの変更点! スタティックリンクをするときには、SFML が依存しているライブラリもアナタのプロジェクトに設定してあげる必要があります。
たとえば、sfml-window-s.lib または sfml-window-s-d.lib を使う場合、opengl32.lib と winmm.lib と gdi32.lib もリンクしてあげてね。
こうした依存ライブラリは "継承の値" に自動的に含まれてるかもしれません。でも! 敢えてアナタの手で設定しておけば確実です。
※ 訳註
「継承の値」 の場所(↓のダイアログの下半分)
プロパティ > リンカー > 入力 > 追加の依存ファイル > 編集
※ 訳註
「継承の値」 の場所(↓のダイアログの下半分)
プロパティ > リンカー > 入力 > 追加の依存ファイル > 編集
SFML の各モジュールが依存しているライブラリの一覧表です。
デバッグビルド用の SFMLモジュールはモジュール名の後ろに "-d" をつけてね(上記参照)。
SFML のモジュール | 依存しているライブラリ |
sfml-system-s.lib |
|
sfml-network-s.lib |
|
sfml-audio-s.lib |
|
sfml-window-s.lib |
|
sfml-graphics-s.lib |
|
上の表を見て気付いたかもですが、SFML のモジュール同士で依存し合ってたりもします。 例えば、sfml-graphics-s.lib は sfml-window-s.lib と sfml-system-s.lib に依存してます。 SFML をスタティックリンクで使うときには、使おうとしているモジュールの依存ライブラリだけでなく、 「依存ライブラリの依存ライブラリ」 もリンクするように気をつけてください。依存関係の連鎖がどこかで切れてるとリンカーエラーになってしまいます。
ちょっとわかりにくかったかな? でも心配ない! スタティックリンクの話でビギナーが混乱するのはいたってノーマルなことです。 実際にやってみて、一回でうまくいかなくても、ここで読んだことを心に留めて何回もトライしよう! どうしてもうまくいかないときは FAQ や フォーラムをチェックだ。
ダイナミックリンクライブラリとスタティックリンクライブラリの違いをご存知じゃないキミは、 検索エンジンに聞いてみてね。
※ 訳注 ※
リンクすべきライブラリは SFML のバージョンによって異なっています。
今見ているこのページは SFML2.2 のチュートリアルです(上記リンクの FAQ も)。
リンクすべきライブラリは SFML のバージョンによって異なっています。
今見ているこのページは SFML2.2 のチュートリアルです(上記リンクの FAQ も)。
そんなわけで設定完了だよ! レッツ動作確認!
main.cpp ファイルに、下記のサンプルを入力してね。
#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; }このサンプルでは関数名が main だけど、プロジェクトを作るときにウィンドウアプリケーションを選択してたら、関数名は WinMain にしてね。 でもそれって Windowsの仕様だから、LinuxとかMacとか、他の環境では同じコードはコンパイルできません。 だから SFMLでは main 関数も使えるようにしてあるのさー。スタンダード!
さて、ビルドの前に sfml-main モジュールをリンクしてくださいませ。 やり方は他のモジュールのときと同じです。 (デバッグモードなら sfml-main-d.libを、リリースモードなら sfml-main.lib をリンク)
ではビルドしてみましょう。ダイナミックリンクライブラリを使ってる場合は DLLを実行ファイルと同じフォルダに置くのを忘れないでね。 (DLLファイルは SFMLを解凍したフォルダの「bin」に入ってるよ)
ビルドが終わったら実行。問題なければ、↓のように表示されるはずだよ。
最後に、オーディオモジュール(sfml-audio)を使うときの注意点です。
オーディオモジュールは、さらに別の外部ライブラリを使ってます。 なので、オーディオモジュールを使うときには、そのライブラリも一緒に入れてあげないといけません。
(スタティックリンクのときも、ダイナミックリンクのときも同じ)
必要なファイルは「libsndfile-1.dll」と「OpenAL32.dll」です。
SFMLを解凍したフォルダの「bin」に入ってます。
実行ファイルと同じフォルダにコピーしてあげてください。