2013-10-06 104 views
1

移動物體時,相機不會保持居中居中。跟隨物體時的相機碰撞

我似乎無法找到該錯誤。請幫忙。

Initial-

`ConvertUnits.ToDisplayUnits(body.Position)-(Camera._screenCenter- Camera._cameraPosition)` 

這將返回零。

經過一些運動後,它發生了變化。 Initial State

After moving the body

我使用Farseer物理引擎3.5,並使用力移動身體。

body.ApplyForce(); 

這是我的相機講座

class Camera 
    { 
     private static Matrix _view; 
     public static Vector2 _cameraPosition; 
     public static Vector2 _screenCenter; 
     private static float _zoom; 
     private static float _rotation; 

     public static void Load(GraphicsDeviceManager _graphics) 
     { 
      _view = Matrix.Identity; 
      _cameraPosition = Vector2.Zero; 
      _screenCenter = new Vector2(_graphics.GraphicsDevice.Viewport.Width/2f, _graphics.GraphicsDevice.Viewport.Height/2f); 
      _rotation = 0f; 
      _zoom = 1.0f; 
     } 

     public static void HandleInput(KeyboardState state) 
     { 
      if (state.IsKeyDown(Keys.Add) && _zoom < 1.0f) 
       _zoom += 0.1f; 
      if (state.IsKeyDown(Keys.Subtract) && _zoom > 0.1f) 
       _zoom -= 0.1f; 

      Update(); 
     } 

     public static void Update() 
     { 
      _view = Matrix.CreateTranslation(
             new Vector3(_cameraPosition - _screenCenter, 0f)) * 
             Matrix.CreateRotationZ(_rotation) * 
             Matrix.CreateScale(new Vector3(_zoom, _zoom, 1)) * 
             Matrix.CreateTranslation(new Vector3(_screenCenter, 0f)); 
     } 

     public static void Follow(Body body) 
     { 
      if (body != null) 
       _cameraPosition = _screenCenter - ConvertUnits.ToDisplayUnits(body.Position); 
     } 

     public static Matrix getView() 
     { 
      return _view; 
     } 
    } 

Debug Info

回答

0

_screenCenter是相機的來源,當你做矩陣沒有被正確地計算。

嘗試:

 return Matrix.CreateTranslation(new Vector3(-Position, 0.0f)) * 
       Matrix.CreateTranslation(new Vector3(-Origin, 0.0f)) * 
       Matrix.CreateRotationZ(Rotation) * 
       Matrix.CreateScale(Zoom, Zoom, 1) * 
       Matrix.CreateTranslation(new Vector3(Origin, 0.0f)); 
+0

謝謝您的回答。 我根據您的建議修改了更新。 使用( - )位置,但它沒有解決問題。身體離開了屏幕。 爲了解決這個問題,我倒過了-ve。但最初的錯誤存在。 – rahulroy9202

+0

我也改變了原點的計算方式,再看一下。 (或者我誤解了) – Cyral

+0

'_screenCenter = Matrix.CreateTranslation(new Vector3(-_ cameraPosition,0.0f))* Matrix.CreateTranslation(new Vector3(-_ screenCenter,0.0f))* Matrix.CreateRotationZ(_rotation)* Matrix.CreateScale(_zoom,_zoom,1)* Matrix.CreateTranslation(new Vector3(_screenCenter,0.0f)); ' 這是你的建議? 在這種情況下,screenCenter是一個Vector2和Matrix向量2轉換不起作用。 – rahulroy9202