1
移動物體時,相機不會保持居中居中。跟隨物體時的相機碰撞
我似乎無法找到該錯誤。請幫忙。
Initial-
`ConvertUnits.ToDisplayUnits(body.Position)-(Camera._screenCenter- Camera._cameraPosition)`
這將返回零。
經過一些運動後,它發生了變化。
我使用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;
}
}
謝謝您的回答。 我根據您的建議修改了更新。 使用( - )位置,但它沒有解決問題。身體離開了屏幕。 爲了解決這個問題,我倒過了-ve。但最初的錯誤存在。 – rahulroy9202
我也改變了原點的計算方式,再看一下。 (或者我誤解了) – Cyral
'_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