縮放一個Texture2D我具有與1280×720的分辨率的窗口餘繪製爲隨後一個160×80按鈕(I意譯有點這裏):在XNA
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×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 x 900.
當我使用小於1280 x 720(854 x 480)的分辨率,但在相反的方向(正偏移矢量而不是負值)時,也會出現此效果。
在每16:9分辨率下,按鈕檢測按照計算的方式工作,但是當我縮放texture2d時,它被繪製在不正確的位置。我唯一的猜測是,我不知道的方式是scale2的紋理。
如果任何人有問題我會非常感激的經驗,
肯
您是否嘗試過指定比例值,但在SpriteBatch.Draw調用中使用原始位置和偏移值? – gareththegeek