LoginSignup
14
6

More than 5 years have passed since last update.

OpenSiv3D の機能紹介[1]

Posted at

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 チャンネル にてお待ちしています。

14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6