Проблема масштабирования матрицы XNA в 2D-игре - PullRequest
0 голосов
/ 13 ноября 2009

Я следовал за учебником на http://www.david -amador.com / 2009/10 / xna-camera-2d-with-zoom-and-вращение / , чтобы получить камеру, которая соответствует моему спрайту плеера с функцией увеличения / уменьшения.

однако, когда я увеличиваю / уменьшаю камеру, кажется, что она либо медленно отодвигается от спрайта во время движения, я не думаю, что устанавливаю правильную позицию, но я не могу понять, что ей нужно быть.

Вот некоторые фрагменты, если это поможет

  if (cam.Follow)
        {
            RectangleF temp = playerBoundingBox;
            cam.Pos = new Vector2(
                (temp.X + temp.Width / 2)*cam.Zoom,
               temp.Y + temp.Height / 2) * cam.Zoom;
        }



    public Matrix get_transformation(GraphicsDevice graphicsDevice)
    {
        _transform =
            // Add Zoom
              Matrix.CreateScale(
               new Vector3((_zoom * _zoom * _zoom),
                                 (_zoom * _zoom * _zoom), 0))
            // Add Camera Rotation
             * Matrix.CreateRotationZ(_rotation)
            // Add Camera Position
             * Matrix.CreateTranslation(
                new Vector3((graphicsDevice.Viewport.Width * 0.5f) - _pos.X,
                                 (graphicsDevice.Viewport.Height * 0.5f) - _pos.Y,
                                  0));
        return _transform;
    }

Заранее спасибо.

1 Ответ

3 голосов
/ 14 ноября 2009

Я нашел ответ через http://xnachat.com/

Position = Vector2.Zero;
ScreenPosition = new Vector2(GraphicsDevice.ViewPort.Width / 2, GraphicsDevice.ViewPort.Height / 2);
Zoom = Vector2.Zero;
Rotation = 0;
public virtual Matrix ViewTransformationMatrix() 
{ 
    Vector3 matrixRotOrigin = new Vector3(Position, 0); 
    Vector3 matrixScreenPos = new Vector3(ScreenPosition, 0.0f); 

    return Matrix.CreateTranslation(-matrixRotOrigin) * 
        Matrix.CreateScale(Zoom.X, Zoom.Y, 1.0f) * 
        Matrix.CreateRotationZ(Rotation) * 
        Matrix.CreateTranslation(matrixScreenPos); 
} 

была бы правильная матрица для использования, по какой-то причине матрица, которую я разместил в своих оригинальных кубиках, значение масштаба

...