0

我想让屏幕跟随玩家,看到很多人使用 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)
    {
    }
}
4

1 回答 1

0

播放器卡在屏幕左侧,因为您将播放器位置设置为与相机位置相同。您需要设置偏移量:

Vector2 offset = new Vector2(GraphicsDeviceManager.PreferredBackBufferWidth / 2, 0); //or whatever you like; new Vector2(100, 0) for an instance
Position = player.Position + offset; // plus or minus don't know just test
于 2014-03-17T21:44:33.983 回答