ウィンドウを一定の比率でサイズ変更
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
ありがとうございます。
[3]を使ってみたところ、画像の表示はうまくいったのですが、ボタンが押されているかを判断する場合に効率よく座標を決める方法はないでしょうか?
編集
Reputeless  2016/02/27(Sat) 07:41
Mouse::SetTransform()を使ってください
https://github.com/Reputeless/Siv3D-Reference/blob/master/Tutorials/Graphics2D.md#座標変換
編集
papas  2016/02/27(Sat) 15:25
ありがとうございます。うまくいきました。
編集
件名
Re: ウィンドウを一定の比率でサイズ変更
名前
コメント
画像添付


投稿修正キー (投稿を修正する時に使います)
画像認証 (右画像の数字を入力) 投稿キー

- WEB PATIO -