Open4
OpenSiv3D v0.6.5 新規追加・更新サンプル
LineString::extractLineString(double, CloseRing)
# include <Siv3D.hpp> // OpenSiv3D v0.6.5
void Main()
{
Scene::SetBackground(ColorF{ 1.0 });
LineString ls, curve;
while (System::Update())
{
if (MouseL.down())
{
ls << Cursor::Pos();
curve = ls
.reversed() // 向きを反転
.catmullRom() // Carmull-Rom スプライン曲線
.extractLineString(20); // 始点からの道のり 20 の位置から終点までの部分 LineString
}
if (curve)
{
curve.draw(2, ColorF{ 0.1 });
// (底辺の中心座標, 頂点, 底辺の長さ)から二等辺三角形を作成
Triangle::FromPoints(curve.front(), ls.back(), 30).draw(ColorF{ 0.1 });
}
}
}
JSON の BSON / CBOR / MessagePack 変換
# include <Siv3D.hpp> // OpenSiv3D v0.6.5
void Main()
{
// JSON ファイルからデータを読み込む
const JSON json = JSON::Load(U"example/json/config.json");
const Blob bson = json.toBSON();
const Blob cbor = json.toCBOR();
const Blob msgpack = json.toMessagePack();
Print << bson.size();
Print << cbor.size();
Print << msgpack.size();
Print << (json == json);
Print << (json == JSON::FromBSON(bson));
Print << (json == JSON::FromCBOR(cbor));
Print << (json == JSON::FromMessagePack(msgpack));
while (System::Update())
{
}
}
ファイルパスを結合する FileSystem::PathAppend()
# include <Siv3D.hpp> // OpenSiv3D v0.6.5
void Test(FilePathView a, FilePathView b)
{
if (a == b)
{
Console << U"[OK]";
}
else
{
Console << U"[Failed]: " << a << U" vs " << b;
}
}
void Main()
{
Test(FileSystem::PathAppend(U"example", U"windmill.png"), U"example/windmill.png");
Test(FileSystem::PathAppend(U"example/", U"windmill.png"), U"example/windmill.png");
Test(FileSystem::PathAppend(U"./example", U"windmill.png"), U"./example/windmill.png");
Test(FileSystem::PathAppend(U"./App/", U"example/windmill.png"), U"./App/example/windmill.png");
Test(FileSystem::PathAppend(U"./", U"windmill.png"), U"./windmill.png");
Test(FileSystem::PathAppend(U"example", U""), U"example/");
Test(FileSystem::PathAppend(U"example/", U""), U"example/");
Test(FileSystem::PathAppend(U"./example", U""), U"./example/");
Test(FileSystem::PathAppend(U"./example/", U""), U"./example/");
Test(FileSystem::PathAppend(U"", U"windmill.png"), U"windmill.png");
Test(FileSystem::PathAppend(U"", U"example"), U"example");
Test(FileSystem::PathAppend(U"", U"example/"), U"example/");
Test(FileSystem::PathAppend(U"", U"./example/"), U"./example/");
Test(FileSystem::PathAppend(U"", U""), U"");
# if SIV3D_PLATFORM(WINDOWS)
Test(FileSystem::PathAppend(U"C:foo", U"bar"), U"C:foo/bar");
Test(FileSystem::PathAppend(U"C:/foo/", U"bar"), U"C:/foo/bar");
# endif
while (System::Update())
{
}
}
TextEditState に、Tab キーや Enter キーによる入力完了を取得できるメンバ変数を追加
# include <Siv3D.hpp> // OpenSiv3D v0.6.5
void Main()
{
Scene::SetBackground(ColorF{ 0.8, 0.9, 1.0 });
TextEditState te0, te1;
bool avtivateNextTextBox = false;
while (System::Update())
{
// Tab キーの押下と同じフレームで次のテキストボックスをアクティブ化してしまうと
// その Tab キーの押下でそのテキストボックスも非アクティブ化してしまうため、1 フレーム後にアクティブ化
if (avtivateNextTextBox)
{
// テキストボックスをアクティブ化
te1.active = true;
avtivateNextTextBox = false;
}
const bool previous = te0.active;
SimpleGUI::TextBox(te0, Vec2{ 100, 100 }, 200);
// 非アクティブ化された
if (previous && (te0.active == false))
{
// Tab キーが入力されていた場合、次のテキストボックスをアクティブ化するフラグを true に
avtivateNextTextBox = te0.tabKey;
}
SimpleGUI::TextBox(te1, Vec2{ 100, 140 }, 200);
}
}