我一直試圖在這兩個樣本來自大衛阿馬多爾結合獲取鼠標座標:從2D照相機和與分辨率無關
http://www.david-amador.com/2010/03/xna-2d-independent-resolution-rendering/
http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/
一切工作正常,除了我有一些難以獲得鼠標座標。我能夠爲每個單獨的樣本獲得它們,但是考慮到兩者的數學似乎是錯誤的。
如果我的虛擬分辨率和正常分辨率相同,那麼鼠標座標是正確的。當我移動相機時,當座標緩慢不同步時,我會執行類似Resolution.SetVirtualResolution(1920,1080) 和Resolution.SetResolution(1280,720,false)的操作。
下面是代碼:
public static Vector2 MousePositionCamera(Camera camera)
{
float MouseWorldX = (Mouse.GetState().X - Resolution.VirtualWidth * 0.5f + (camera.position.X) * (float)Math.Pow(camera.Zoom, 1))/
(float)Math.Pow(camera.Zoom, 1);
float MouseWorldY = ((Mouse.GetState().Y - Resolution.VirtualHeight * 0.5f + (camera.position.Y) * (float)Math.Pow(camera.Zoom, 1)))/
(float)Math.Pow(camera.Zoom, 1);
Vector2 mousePosition = new Vector2(MouseWorldX, MouseWorldY);
Vector2 virtualViewport = new Vector2(Resolution.VirtualViewportX, Resolution.VirtualViewportY);
mousePosition = Vector2.Transform(mousePosition - virtualViewport, Matrix.Invert(Resolution.getTransformationMatrix()));
return mousePosition;
}
在分辨率添加此:
virtualViewportX = (_Device.PreferredBackBufferWidth/2) - (width/2);
virtualViewportY = (_Device.PreferredBackBufferHeight/2) - (height/2);
其他的都是一樣的示例代碼。提前致謝!