補足資料
補足資料があればここに追加します
二重ループ
code:cpp
# include <Siv3D.hpp>
void Main()
{
for (auto p : step(Size(5, 3)))
{
Print << p.x << U' ' << p.y;
}
while (System::Update())
{
}
}
3D 機能(現在は限定的)
GIF Animation 透過版
code:cpp
# include <Siv3D.hpp>
void Main()
{
MSRenderTexture renderTexture(128, 128);
const Font font(60, Typeface::Heavy);
// GIF アニメ出力クラス (透過)
AnimatedGIFWriter gif(U"emoji.gif", 64, 64, false, true);
// 書き出したフレーム数
int32 frameCount = 0;
while (System::Update())
{
renderTexture.clear(Color(0, 0));
{
ScopedRenderTarget2D renderTarget(renderTexture);
BlendState b;
b.op = BlendOp::Add;
b.opAlpha = BlendOp::Add;
b.dst = Blend::Zero;
b.src = Blend::One;
b.dstAlpha = Blend::Zero;
b.srcAlpha = Blend::One;
ScopedRenderStates2D blend(b);
// (64, 64) を中心に回転する座標変換を適用
Transformer2D transform(Mat3x2::Rotate(18_deg * frameCount, Vec2(64, 64)));
font(U"仙台").drawAt(64, 64, Palette::Orange);
}
{
Graphics2D::Flush();
renderTexture.resolve();
}
if (frameCount < 20) // 20 フレーム書き出し
{
Image image;
renderTexture.readAsImage(image);
image = image.scaled(64, 64);
for (auto& pixel : image)
{
if (pixel.a > 127)
{
pixel.a = 255;
}
}
// GIF アニメのフレームとして書き出し
gif.writeFrame(image, 0.1s);
++frameCount;
}
else // 20 フレーム書き出したら終了
{
break;
}
// レンダーテクスチャの描画
renderTexture.draw(20, 20);
}
}