如果地图的中心是 origo (0,0,0),这很容易:
首先将默认相机位置存储在 Vector3 CameraOffset 中,然后使用旋转矩阵计算位置。redians 中的 90* 是半个 Pi,所以我们将使用 PiOverTwo。我们还将使用枚举来决定要指向的方向,所以你可以说
Camera.Orientation = 方向.东;
并且相机应该自行修复:)
public enum Orientation
{
North, East, South, West
}
在相机中:
public Vector3 Position { get; protected set; }
Vector3 _CameraOffset = new Vector3(0, 20, 20);
public Vector3 CameraOffset
{
get
{
return _Orientation;
}
set
{
_Orientation = value;
UpdateOrientation();
}
}
Orientation _Orientation = Orientation.North;
public Orientation Orientation
{
get
{
return _Orientation;
}
set
{
_Orientation = value;
UpdateOrientation();
}
}
private void UpdateOrientation()
{
Position = Vector3.Transform(CameraOffset, Matrix.CreateRotationY(MathHelper.PiOverTwo * (int)Orientation));
}
如果您想在位置之间进行滑行运动,我想我也可以提供帮助;)
如果您的相机没有聚焦于 Vector3.Zero 并且不应该围绕它旋转,您只需要更改:
Position = Vector3.Transform(CameraOffset, Matrix.CreateRotationY(MathHelper.PiOverTwo * (int)Orientation));
至:
Position = Vector3.Transform(CameraOffset, Matrix.CreateRotationY(MathHelper.PiOverTwo * (int)Orientation) * Matrix.CreateTranslation(FocusPoint));
在这里,FocusPoint 是您旋转的 3D 点(您的世界中心)。现在你也知道如何让你的相机四处移动,如果你在你的 Camera.Update() 中调用 UpdateOrientation() ;)
编辑; 很抱歉,完全错过了您使用 2D 的重点。我稍后会回来看看我是否可以提供帮助:P