Я хочу, чтобы экран следовал за игроком, видя, что многие используют Matrix, чтобы заставить камеру делать то, что им нужно, я немного застреваю. У меня есть основной класс под названием Game1.cs, класс Player, в котором движение удерживается, и у большинства людей есть система движения в их функции камеры. Все, что я хочу, это чтобы камера следовала за игроком, без масштабирования или вращения (на данный момент).
У меня есть начало класса камеры:
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.кс:
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?
Редактировать: 10:36, 17 марта 2014 г.
Я заставил его следовать за игроком, изменив 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)
{
}
}