Creating A 2D Camera Controller With MonoGame

Introduction

A 2D camera is a fundamental component in game development, allowing developers to control what part of the game world is visible on screen. In MonoGame, implementing a simple 2D camera involves handling translation, zooming, and rotation using a transformation matrix.

Setting Up The Camera Class

using Microsoft.Xna.Framework;

public class Camera2D
{
    public Matrix Transform { get; private set; }
    public Vector2 Position { get; set; }
    public float Rotation { get; set; }
    public float Zoom { get; set; } = 1f;

    public Camera2D()
    {
        Position = Vector2.Zero;
        Rotation = 0f;
    }

    public void Update()
    {
        Transform = Matrix.CreateTranslation(new Vector3(-Position, 0)) *
                    Matrix.CreateRotationZ(Rotation) *
                    Matrix.CreateScale(Zoom) *
                    Matrix.CreateTranslation(new Vector3(400, 240, 0)); // Assuming 800x480 resolution
    }
}

Applying The Camera Transition

Once we have our camera class, we need to apply its transformation matrix when rendering sprites. This can be done using SpriteBatch.Begin:

spriteBatch.Begin(transformMatrix: camera.Transform);

Moving The Camera

To move the camera around the game world, we simply update its position:

if (Keyboard.GetState().IsKeyDown(Keys.W))
    camera.Position += new Vector2(0, -5);
if (Keyboard.GetState().IsKeyDown(Keys.S))
    camera.Position += new Vector2(0, 5);
if (Keyboard.GetState().IsKeyDown(Keys.A))
    camera.Position += new Vector2(-5, 0);
if (Keyboard.GetState().IsKeyDown(Keys.D))
    camera.Position += new Vector2(5, 0);

Conclusion

Implementing a 2D camera in MonoGame allows for smooth panning, zooming, and rotation, greatly enhancing the player's experience. With a simple transformation matrix, you can easily control how your game world is rendered on screen.