Я пытаюсь сделать игру от первого лица для Monogame, и пока все, что я нашел или нашел в Интернете, не соответствовало моим стандартам.
вот как я сейчас работаю с мышью:
private void HandleMouse()
{
Vector2 mouseDifference;
mouseNow = Mouse.GetState();
if (mouseNow.X != mouseDefaultPos.X || mouseNow.Y != mouseDefaultPos.Y)
{
mouseDifference.X = mouseDefaultPos.X - mouseNow.X;
mouseDifference.Y = mouseDefaultPos.Y - mouseNow.Y;
leftrightRot += mouseSens * mouseDifference.X;
updownRot += mouseSens * mouseDifference.Y;
Mouse.SetPosition((int)mouseDefaultPos.X, (int)mouseDefaultPos.Y);
UpdateViewMatrix();
}
}
private void UpdateViewMatrix()
{
Matrix cameraRotation = Matrix.CreateRotationX(updownRot) * Matrix.CreateRotationY(leftrightRot);
Vector3 cameraOriginalTarget = new Vector3(0, 0, -1);
Vector3 cameraOriginalUpVector = new Vector3(0, 1, 0);
Vector3 cameraRotatedTarget = Vector3.Transform(cameraOriginalTarget, cameraRotation);
Vector3 cameraRotatedUpVector = Vector3.Transform(cameraOriginalUpVector, cameraRotation);
viewMatrix = Matrix.CreateLookAt(new Vector3(0,0,0), cameraRotatedTarget, cameraRotatedUpVector);
}
Моя проблема в том, что, хотя это решение работает, оно крайне противоречиво, когда речь идет о том, как далеко камера должна вращаться.
например, происходит, когда я делаю круги мышью и вижу, что иногда мышь случайным образом прыгает больше, чем ожидалось.
Мои основные предположения о несоответствиях в fps, которые приводят к изменению времени между кадрами, что влияет на расстояние, которое мышь может перемещать за это время.
Я не знаю, является ли это причиной или моё предположение может даже вызвать это, но я хотел бы найти способ добиться последовательного движения мыши.
При необходимости могу предоставить видео проблемы.
Заранее спасибо.