Posted at
Siv3DDay 14

OpenSiv3D の機能紹介[1]

More than 1 year has passed since last update.

Window と macOS に対応する次世代 Siv3D 「OpenSiv3D」 の開発がオープンソースで進行中です。

OpenSiv3D は Siv3D の公開から 4 年間で積み上げてきた知見と技術をもとにゼロベースから設計を見直し、これまで以上に短いコードと便利な機能を実現する計画です。

現在の最新バージョンは 2016 年 12 月 14 日にリリースされた OpenSiv3D 0.0.5 です。

現時点では低レイヤ部分の実装がメインで、まだ画面への描画や音楽の再生はできませんが、リンク先の SDK をインストールすれば、通常の Siv3D Package のように簡単にインストールし、実装されている機能を試せます。

今回の記事ではその中からいくつかの面白い機能を紹介します。

これだけではゲームやアプリ開発にどう便利なのかイメージがつきにくいかもしれませんが、のちのち開発が進めばその威力が発揮されます。楽しみにしていてください。


0 から 100 までの合計を求める

Log << Range(0, 100).sum(); // 5050


0 から 100 のうち 20 未満の個数を調べる

Log << Range(0, 100).count_if(LessThan(20)); // 20


100 の階乗 (100!)

Log << Range(1, 100).reduce1(Multiplies<BigInt>());

// 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000


111122223333 以上の素数を小さい順に 5 つ探す

Log << InfiniteList(111122223333).filter(IsPrime).take(5);

// {111122223337,111122223347,111122223353,111122223361,111122223367}


0 から 9 の数をシャッフル


従来

Array<int32> v = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Shuffle(v);

Log(v); // {8,4,3,7,0,5,6,2,9,1}



OpenSiv3D

const Array<int32> v = Range(0, 9).asArray().shuffle();

Log << v; // {8,4,3,7,0,5,6,2,9,1}



文字列フォーマット


従来

int32 time = 20;

Log(L"残り時間 {} 秒"_fmt, time); // 残り時間 20 秒


OpenSiv3D

int32 time = 20;

Log << L"残り時間 {} 秒"_fmt(time); // 残り時間 20 秒


中心が (30, 30), 大きさが (40, 50) の長方形を作る


従来

const Rect r = Rect(40, 50).setCenter(30, 30);



OpenSiv3D

const Rect r(Arg::center(30, 30), 40, 50);



10 秒経過するまで実行


従来

for (Stopwatch s(true); s.elapsed() < 10s; )

{
// DoWork();
}


OpenSiv3D

for (Stopwatch s(true); s < 10s; )

{
// DoWork();
}


コンソールウィンドウから数を入力し、その 2 倍の数をログに出力する


従来

Console::Open();

int32 n;

std::wcin >> n;

Log(n * 2);



OpenSiv3D

Log << Console.read<int32>() * 2;



さいころの結果を 10 個生成


従来

Array<int32> v;

for (int32 i = 0; i < 10; ++i)
{
v.push_back(Random(1, 6));
}



OpenSiv3D

const Array<int32> v(10, Arg::generator = RNG(1, 6));


このほかに現時点での特筆すべき機能として


  • 実行時のクラッシュの回避 (Windows 構造化例外処理)

  • 新しいファイル圧縮方式 (Zstandard)

  • constexpr 対応の強化

  • マルチスレッド処理の強化

が挙げられます。

OpenSiv3D の今後のアップデートにご期待ください。

開発への参加は Siv3D Slack #open-siv3d チャンネル にてお待ちしています。