2

解像度が 1280 x 720 のウィンドウに 160 x 80 のボタンがあります。次のように描画します (ここで少し言い換えます)。

currentwindowwidth = 1280;
// The scale in this instance would be 1.0f
scale = currentwindowwidth / 1280f;
b.position = new Vector2(640, 650) * scale;
b.origin = new Vector2(80, 40) * scale;
spriteBatch.Draw(b.texture, b.pos, null, Color.White, 0, b.ori, scale, SpriteEffects.None, 0);

1280 x 720 でウィンドウを描画すると、ボタンが正しい位置に描画され、ボタンが検出されます。

if (mousepos.X >= b.pos.X - b.ori.X && mousepos.X <= b.pos.X + b.ori.X)
{
    if (mousepos.Y >= b.pos.Y - b.ori.Y && mousepos.Y <= b.pos.Y + b.ori.Y)
    {
        HandleButton(b);
    }
}

100% 動作します。ボタンはマウスのクリックをピクセル単位の精度で検出し、texture2d は検出ボックスに忠実に描画されます。

ただし、1920 x 1080 (同じ縦横比) に拡大すると、ボタンが間違った場所に描画されます。

currentwindowwidth = 1920;
// The scale would be 1.5f here
scale = currentwindowwidth / 1280f;
b.position = new Vector2(640, 650) * scale;
b.origin = new Vector2(80, 40) * scale;
spriteBatch.Draw(b.texture, b.pos, null, Color.White, 0, b.ori, scale, SpriteEffects.None, 0);

これにより、(960, 975) の位置ベクトルと (120, 60) の原点が得られます (<-- Visual Studio の [ローカル] タブにあります)。いくつかの計算を行った後、これらは正しい値になり、ボタンの検出は私が望む場所で正確に機能します。ただし、スプライトが正しい位置に描画されない場合は、本来あるべき位置から (-60、-30) ピクセル オフセットして描画されます。拡大すると、ボタン検出は正しい位置 (840 ~ 1080、915 ~ 1035) で機能しますが、texture2d は間違った場所に描画されます。

これは、画面を 1366 x 768 などの別の 16:9 解像度にスケーリングした場合にも発生します。ただし、(-60, -30) オフではなく、比例して (-8.0625, -4.03125) および (-30, -15) で 1600 にします。 ×900。

この効果は、1280 x 720 (854 x 480) より小さい解像度を使用した場合にも見られますが、反対方向 (負のオフセット ベクトルではなく正のオフセット ベクトル) です。

すべての 16:9 解像度で、ボタン検出は計算どおりに機能しますが、texture2d をスケーリングすると、正しくない場所に描画されます。私の唯一の推測は、私が気付いていない方法でスケールスケールが texture2d であるということです。

他の誰かがこの問題について経験を持っているなら、私はそれを大いに感謝します.

ケン

4

1 に答える 1