Siv3D December 2013 リリース | おすすめ機能

昨日 Siv3D December 2013 をリリースしました。5 か月ぶりの安定版です。
たくさんの更新内容 の中で、僕が特に気に入ってる 8 つのトピックを紹介します。

インストール時間が短くなった

June 2013 で Visual Studio プロジェクトテンプレートを導入、そして今回簡易インストーラを導入することで、セットアップの手間を 3 秒に短縮しました。
ユーザーができるだけ早く Siv3D を遊べることを目標に、さらに短くできる可能性を追求していきます。

もっと C++11 に対応

Visual Studio 2013 が対応した C++11 の新機能を活用して、より書きやすく読みやすいコードのために API デザインを一新しました。
いくつか例を紹介します。

Uniform initialization によって Vec2 や Color を省略できるようになりました。

	Triangle triangle(Vec2(10, 10), Vec2(30, 30), Vec2(10, 30));

	triangle.draw(Color(0, 255, 0));
	Triangle triangle({ 10, 10 }, { 30, 30 }, { 10, 30 });

	triangle.draw({ 0, 255, 0 });

Initializer list を使って Polygon を直接構築できるようになりました。

	// 頂点の配列
	const Vec2 pts[] =
	{
		Vec2(0,-200),Vec2(40,-60),
		Vec2(180,-60),Vec2(75,25),
		Vec2(115,160),Vec2(0,80),
		Vec2(-115,160),Vec2(-75,25),
		Vec2(-180,-60),Vec2(-40,-60)
	};

	// 頂点の配列から多角形を作成
	const Polygon star(pts);
	const Polygon star
	{
		{ 0, -200 }, { 40, -60 },
		{ 180, -60 }, { 75, 25 },
		{ 115, 160 }, { 0, 80 },
		{ -115, 160 }, { -75, 25 },
		{ -180, -60 }, { -40, -60 }
	};

Variadic templates のおかげで Format がスタイリッシュになりました。

String text = Format() + L"aaa" + (1 + 1) + Vec2(20, 20) + L'b';
String text = Format(L"aaa", 1 + 1, Vec2(20, 20), L'b');

FFT

再生・録音している音声のスペクトルを解析できるようになりました。音楽に使えばオーディオビジュアライザーや曲調に合わせた演出、マイクに使えば音声に応じたインタラクティブなアプリケーションを開発できます。( サンプル | マイク入力のスペクトラム )
正確な音の高さの口笛を吹く音ゲーを作るのとか面白そうな気がします。

フルスクリーン・ウィンドウの切り替え

実行中にフルスクリーンモード・ウィンドウモードを切り替えられるようになりました。
フルスクリーンモードが対応する解像度は環境によって違うので

std::vector<Point> Graphics::GetFullScreenSize()

関数で、利用可能な解像度を調べておきましょう。

アセット管理

August 2013 beta まで「Resource」という名前の実験的機能でしたが、正式機能に格上げされました。( リファレンス | アセット管理 )
プログラムのどこからでも名前だけで Texture や Sound, Font などのアセットデータを取得できるので、ゲームのように大量のアセットを使うアプリケーションの開発が楽になります。
アプリの実行中に画像やサウンドファイルを変更すると即座に実行中のアプリに反映される機能も開発のスピードを加速させます。

プログラミング入門者向けの簡単な文法

Siv3D で入門者にプログラミングの楽しさを教えられることが目標の 1 つです。
今回の Siv3D には Print / Println / WaitKey という 3 つの強力な関数が追加されました。
これを使えば、メインループや Font のことを考えずに Hello world を書けます。

# include <Siv3D.hpp>

void Main()
{
	Println(L"Hello, world!");

	WaitKey();
}

Print / Println は画面の最前面にテキストを表示する、Siv3D 版の printf や std::cout です。通常の開発時にもデバッグ出力として利用できます。

# include <Siv3D.hpp>

void Main()
{
	while (System::Update())
	{
		if (Input::MouseL.clicked)
		{
			Println(L"クリックした座標: ", Mouse::Pos());
		}
	}
}

WaitKey の内部では特殊なメインループを実行していて、直前に描画、サウンド再生を入れることもできます。

# include <Siv3D.hpp>

void Main()
{
	Circle(100, 100, 50).draw();

	const Sound sound = Dialog::OpenSound();

	sound.play();

	WaitKey();
}

図形描画の機能拡張

アーチ型、LineStrig の頂点の整形、スプライン曲線、グラデーション付き図形といった機能を追加しました。
図形描画はテクスチャ描画に比べて、メモリ消費が少なく描画速度も速いといった利点があるので、なるべく多くのことを図形描画でできるようにしていきたいです。

サウンドファイルの機能拡張

32bit float WAVE や、特別なヘッダの入った WAVE ファイルが読み込めなかったバグ、一部の MP3 のデコードで曲の最後にノイズが入るバグなど、サウンドファイル関連の問題を修正しました。
出力については新しく MP3(Windows 8 以降) と WMA(Windows 7 以降) の保存に対応し、WAVE, OggVorbis, AAC と合わせて主要なオーディオフォーマットをほぼカバーしました。

December 2013 の新機能についてはまだ紹介しきれていないことが多いので、今後ブログで解説記事を増やしていきます。