我在一个分辨率为 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 的“Locals”选项卡中找到)。在进行了一些计算之后,这些是正确的值,并且按钮检测正好在我希望它工作的地方工作。然而,精灵没有绘制在正确的位置,它被绘制(-60,-30)像素偏移它应该在的位置。当按比例放大时,按钮检测工作在正确的位置(840-1080、915-1035),但纹理 2d 绘制在错误的位置。
当我将屏幕缩放到另一个 16:9 分辨率(例如 1366 x 768)时也会发生这种情况,除了不是 (-60, -30) 关闭而是按比例 (-8.0625, -4.03125) 和 (-30, -15) 在 1600 × 900。
当我使用小于 1280 x 720 (854 x 480) 的分辨率但在相反方向(正偏移矢量而不是负偏移矢量)时,也会看到这种效果。
在每 16:9 分辨率下,按钮检测都按计算工作,但是当我缩放 texture2d 时,它被绘制在不正确的位置。我唯一的猜测是比例尺是我不知道的纹理2d。
如果其他人对此问题有任何经验,我将不胜感激,
肯