Я пытаюсь вращать свою камеру вокруг себя, что, по моему мнению, дало бы мне действительно крутой эффект в моей игре. Проблема в том, что я не знаю как.
Я использую Matrix для вращения. Хотя я работаю в 2D, я использую Vector3
s, потому что это дает больший контроль над матрицами.
По сути, вращающийся шарнир камеры - это верхний левый угол вместо центра. Вот мой код и то, что я пробовал (я использую XNA / MonoGame):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Showdown
{
public class Camera
{
public Matrix transform;
public Vector2 folllow;
public Viewport view;
public Vector2 position;
public float rotation;
public float zoom;
public float maxRotation = 0.1f;
public float rotateSpeed = 0.05f;
public float rotateDirection = -1f;
bool follow = false;
public Camera(Viewport _view)
{
view = _view;
}
public void Update(Vector2 _follow)
{
GetRotation();
if (follow) // true if there's something to follow
{
position = _follow;
}
else
{
position = Vector2.Zero;
}
transform = Matrix.CreateScale(new Vector3(zoom, zoom, 0f));
transform = Matrix.CreateTranslation(new Vector3(position.X, position.Y, 0f));
transform.Translation = Vector3.Transform(Vector3.Zero, Matrix.CreateRotationZ(rotation));
}
void GetRotation()
{
rotation += rotateSpeed * rotateDirection * (float)Globals.gameTime.ElapsedGameTime.TotalSeconds;
if (rotateDirection < 0f && rotation <= -maxRotation)
{
rotateDirection = 1f;
}
if (rotateDirection > 0f && rotation >= maxRotation)
{
rotateDirection = -1f;
}
}
}
}