ウィンドウを一定の比率でサイズ変更
papas 2016/02/26(Fri) 20:09
サイズを変えられるウィンドウでサイズを変える時の比率を一定にしつつ、その拡大倍率に合わせて画像等も大きさが変わるようにしたいのですが、うまくいきません。
また、サイズを変えるときの白い矢印が出る場所ではマウスのクリックの判定が使えなかったのですが、ウィンドウのサイズ変更が終わり、クリックが離された時に画像等のサイズを変更するにはどうしたら良いですか?
↓のようにして試したのですが、ウィンドウが勝手に移動したりします。resizeの時にウィンドウが中央に行くことが原因かと思いsetposを入れたのですが、一瞬ウィンドウが中央に行ってしまいます
m_data->a = Window::GetPos();
Window::SetStyle(WindowStyle::Sizeable);
Window::Resize(Window::Width(), Window::Width() / 3.0 * 2);
Window::SetPos(m_data->a);
Graphics2D::SetTransform(Mat3x2::Scale(Window::Width() / m_data->winsizex, Window::Height() / m_data->winsizey));
//winsizex,yは背景画像の大きさ
これとは別のことなのですが、シーン管理で一番最初のシーンに入るときのフェードインの消し方も教えてください。
Reputeless 2016/02/26(Fri) 21:04
[1]
Siv3D では、ウィンドウの枠をつかんで、比率を一定にしつつウィンドウのサイズを変える動作はサポートしていません。
プログラムからサイズを変更してください。
[2]
SceneManager::changeScene(state, time, crossfade) を使います。
https://github.com/Reputeless/Siv3D-Reference/blob/master/Examples/SceneManager.md#応用
では次のようになります。
void Main()
{
FontAsset::Register(L"Title", 60);
FontAsset::Register(L"Score", 40);
MyApp manager;
manager.add<Title>(L"Title");
manager.add<Game>(L"Game");
manager.add<Result>(L"Result");
manager.changeScene(L"Title", 0, false);
while (System::Update())
{
if (!manager.updateAndDraw())
break;
}
}
papas 2016/02/26(Fri) 21:56
Reputeless 2016/02/26(Fri) 22:35
[3]
# include <Siv3D.hpp>
void Main()
{
Window::SetStyle(WindowStyle::Sizeable);
const Vec2 base(640, 480);
RectF rect(0, 0, base);
while (System::Update())
{
const double a = Window::Width() / base.x;
const double b = Window::Height() / base.y;
const double s = Min(a, b);
const Vec2 offset = Vec2(Window::Width() - base.x * s, Window::Height() - base.y * s) / 2;
Graphics2D::SetTransform(Mat3x2::Scale(s).translate(offset));
rect.draw();
rect.drawFrame(2, 0, Palette::Orange);
}
}
これでどうでしょうか。
[4]
ウィンドウの枠を掴んでいるかどうかの判定はできません。
今後機能として提供するか検討します。
papas 2016/02/26(Fri) 23:50
Reputeless 2016/02/27(Sat) 07:41
Mouse::SetTransform()を使ってください
https://github.com/Reputeless/Siv3D-Reference/blob/master/Tutorials/Graphics2D.md#座標変換