Rectに画像を表示したい
初心者 2024/03/12(Tue) 15:06
Reputeless 2024/03/13(Wed) 09:45
Siv3D Dsicord サーバにて同じ質問をいただいて回答したので、転記します。
====
背景が単色であれば、破壊済みブロックを背景色で描画すれば簡単に実現できます。
```cpp
# include <Siv3D.hpp>
void Main()
{
Scene::SetBackground(ColorF{ 0.6, 0.8, 0.7 });
const Texture texture{ U"example/windmill.png" };
// 残っているブロック
Array<Rect> rects;
for (int32 y = 0; y < 4; ++y)
{
for (int32 x = 0; x < 6; ++x)
{
rects << Rect{ (x * 80), (y * 80), 80 };
}
}
// 破壊済みのブロック
Array<Rect> removedRects;
while (System::Update())
{
for (auto it = rects.begin(); it != rects.end();)
{
// ブロックをクリックしたら
if (it->leftClicked())
{
// 破壊済みの配列に追加する
removedRects << *it;
it = rects.erase(it);
}
else
{
++it;
}
}
texture.draw();
// ブロックの枠線を描画する
for (const auto& rect : rects)
{
rect.drawFrame(1, 0);
}
// 破壊済みのブロックを背景色で描画する
for (const auto& rect : removedRects)
{
rect.draw(ColorF{ 0.6, 0.8, 0.7 });
}
}
}
```
そうでない場合は適切なテクスチャ領域 `texture(x, y, w, h)` を適切な `Rect` に貼り付けて描画してください(チュートリアル 25.15)
背景が単色の場合(添付サンプルコード)の実行結果 ↓