我想让屏幕跟随玩家,看到很多人使用 Matrix 让相机随心所欲地做,我有点卡住了。我有一个名为 Game1.cs 的主类,一个 Player 类是运动,大多数人在他们的相机功能中都有运动系统。我想要的只是相机跟随玩家,没有缩放或旋转(目前)。
我开始了 Camera 课程:
class Camera
{
public Matrix Transform;
Vector2 Position;
Viewport viewPort;
public Camera(Viewport viewport)
{
viewPort = viewport;
Position = Vector2.Zero;
}
public void Update(GameTime gameTime)
{
Transform = Matrix.CreateTranslation(Position.X, Position.Y, 0);
}
}
游戏1.cs:
protected override void LoadContent()
{
camera = new Camera(GraphicsDivice.Viewport);
}
Protected override void Draw(GameTime gameTime)
{
spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, null, null, null, camera.Transform);
//Stuff Here
spriteBatch.End();
base.Draw(gameTime);
}
我错过了什么?我该如何解决这个问题?
我应该/如何添加我的 Player.cs 类?
编辑:2014 年 3 月 17 日 10:36
我通过将 Matrix Transform 更改为方法并将 Transform() 添加到SpriteBatch.Begin()
. 我还添加了一个public Player thing(Player player)
以使位置等于玩家位置。但是播放器被卡在屏幕的左侧。
如何使播放器位于屏幕中央?
代码现在看起来像这样:
class Camera
{
Player player;
public Vector2 Position;
Viewport viewPort;
public Matrix Transform()
{
var translationMatrix = Matrix.CreateTranslation(new Vector3(-Position.X, 0, 0));
return translationMatrix;
}
public Player thing(Player player)
{
Position = player.Position;
return player;
}
public Camera(Viewport viewport)
{
viewPort = viewport;
}
public void Update(GameTime gameTime)
{
}
}