じゃあ、さっそく、
ダウンロードのページに行って、SFML の SDK をダウンロードしようぜ!
GCC 用のバイナリをゲットするのだ。
世間には Windows用の GCC がいくつもあって、しかも互換性がありません
(例外の仕組みが違う……スレッドのモデルが異なる……などなど)。
なので、SFML の SDK は、
キミが使ってる GCC に合うものをダウンロードしてね!
え、どんな GCC を使ってるのか、わからないって? そんなときは、"MinGW/bin" フォルダーを見てみてね。
その中に入ってるのは "libgcc_s_sjlj-1.dll" かな? それとも "libgcc_s_dw2-1.dll" かな?
または、MinGW を Code::Blocks と一緒にインストールしたんだったら、きっとキミの GCC は SJLJ だと思うよ。
うーん、どれも当てはまらない? ということは、SFML の公式サイトに置いてある バイナリの中には、
キミの GCC に合うものがないのかもしれないね。
でも大丈夫! まだ奥の手があるんだ。それは……SFML そのものをキミの環境に合うように
ソースからコンパイルするんだ! 遠慮は無用さ!
Go! Go!
さて、ダウンロードしたら、どこでも好きな場所に展開してね。
だけど、ヘッダーとライブラリを MinGW をインストールした場所にコピーするのはデンジャラスだぜ?
どこか別の場所に分けておくと、用途に合わせて複数のバージョンを共存させられてクールなのさー。
どんな種類のプロジェクトを作ろうかな?
Code::Blocks でプロジェクトを作ろうとすると、いろーんなプロジェクトが表示されるから、目移りしちゃうね!
その中に……おっと、"SFML project" なんてものがあるじゃないか! いやっほーい!
でもダメ! 使っちゃダメー!
なんかね、それ、動かないっぽい。
なので、おしとやかに無印の C++ プロジェクトを作ることにしましょう。
何も言わずに "Console Application" を選択だ。
なになに? コンソールを消したい?
じゃあ、プロジェクトを作った後、プロジェクト名を右クリックして "Properties" をクリック。
"Build targets" タブを開いて、"Console application" を "GUI application" に変更だ!
さて、次は コンパイラさんに SFML のヘッダーさんたち( ****.hpp のファイル群)がどこにいるのかを教えてあげよう。
リンカさんには SFML のライブラリさんたち( *****.a のファイル群)の場所を教えてあげるよ。
プロジェクト名を右クリックして "Build options" をクリック。
"Search directories" のタブを開く。
SFML のヘッダーさんたちの居場所( [SFML を設置したパス]/include)を "Compiler" のところに 追加(Add)。
SFML のライブラリさんたちの居場所( [SFML を設置したパス]/lib)を "Compiler" のところに 追加(Add)。
画面左のリストで、Debug と Release に分かれてるけど、ここでは、その上にある「プロジェクト名」を選んだ状態にしておこう。
そうすると、設定内容は Debug と Release の両方に反映されるよ。
次のステップは、キミがソースコードの中で使うライブラリ("****.a" のファイル)をアプリケーションにリンクする設定だよ。
SFML には5つのモジュールがあるんだ(システム、ウィンドウ、グラフィックス、ネットワーク、オーディオ)。
プロジェクト名を右クリックして "Buils options" を選択。
"Linker settings" タブを開いて、"Link libraries" に、必要なライブラリを全て追加するよ。
"Add" ボタンを押すとファイルを選択するダイアログが出るから、該当するライブラリ名を入力してね。
たとえばグラフィックスモジュールなら "sfml-graphics"、ウィンドウモジュールなら "sfml-window"。
実際のライブラリファイル名の冒頭の "lib" と、拡張子 ".a" を省略した文字列だよ。
デバッグモードとリリースモードとで、リンクするべきライブラリが異なります。
"sfml-xxx-d" は デバッグ用。 "sfml-xxx" はリリース用だよ。混ぜないで!
複数の ライブラリをリンクする場合、順番に気をつけてください。
ルールは、こうです。
他のライブラリに依存しているライブラリは、リストの頭の方に配置。
SFML のライブラリは、どれも、"sfml-system" に依存してます。
そして、"sfml-graphics" は "sfml-window" に依存してます。
なので、この3つの正しい並び方は上から順に "sfml-graphics"、"sfml-window"、"sfml-system" です。
上のスクリーンショットをよく見てね。
ところで実は、今までしてきた設定は、SFML のライブラリに
動的リンクする設定なのです。
実行するときに DLL が必要になる、あのタイプです。
DLL とは縁を切って、実行ファイルに SFML を混ぜ混ぜしたい? そんなときは
静的リンク用のライブラリファイルを使うんだ。
静的リンク用の SFML ライブラリは、 ファイル名のお尻に "-s" がついてるよ。
つまり "sfml-xxx-s-d" がデバッグ用。 "sfml-xxx-s" がリリース用ということだね。
それともう1つ。
"SFML_STATIC" というマクロをプロジェクトのプリプロセッサの設定に追加してあげてね。
この状態でビルドすると、静的リンクになるよ。
動的リンクと静的リンクの違いを知らないお友達は、検索エンジンで調べてみてね!
ちなみに、動的リンクは共有ライブラリとも呼ばれてるよ。
さて、そんなわけで、プロジェクトの設定は完了だよ。
そして、お待ちかね。サンプルコードの時間でーす! わーわー、ぱちぱちぱち。
プロジェクトに "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(255,255,255,255 ));
shape.setOutlineThickness (-1);
shape.setOutlineColor ( sf::Color::Black );
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear( sf::Color::Green );
window.draw(shape);
window.display();
}
return 0;
}
ファイルに上のサンプルを書くか、またはコピペしたら、コンパイル。
動的リンクで SFML を使ってるなら、SFML の DLL を実行ファイルのあるフォルダにコピーするのを忘れないでね!
(DLL は SFML を解凍したフォルダの "/bin" フォルダの中だよ)
さぁ、実行だ!
こんなウィンドウさん↓ 出てきてー! お願いー!
ところで、オーディオモジュール(sfml-audio)を使うときには、さらに別の DLL も必要なんだ。
"libsndfile-1.dll" と "OpenAL32.dll" の2つだよ。
SFML を解凍したフォルダの "/bin" フォルダに入ってるので、実行ファイルと同じフォルダにコピーしてあげてね。
これは、SFML を 静的リンクにしているときにも 動的リンクにしているときにも必要だよ。