XNA - Global Zoom - PullRequest
       18

XNA - Global Zoom

1 голос
/ 27 мая 2011

Я пытаюсь разрешить масштабирование с помощью прокрутки мыши и передать значение масштабирования в каждый из моих нарисованных объектов.Каждый рисуемый объект принимает значение масштабирования и использует параметр scale метода SpriteBatch.Draw.Масштабирование каждого отдельного элемента не работает по отношению ко всем остальным объектам.Есть ли какой-нибудь вид холста, на который я могу нарисовать все, а затем увеличить, чтобы все масштабировалось соответствующим образом?

Ответы [ 2 ]

3 голосов
/ 28 мая 2011

Используйте метод SpriteBatch.Begin, который принимает параметр Matrix.Передайте матрицу scaling :

Matrix scaleMatrix = Matrix.CreateScale(myScale);
sb.Begin(SpriteSortMode.Deferred, null, null, null, null, null, scaleMatrix);

Этот параметр следует использовать для всех "глобальных" преобразований ваших спрайтов.Таким образом, вы можете комбинировать (умножать) перевод и матрицу масштабирования для перемещения и масштабирования 2D-сцены.

1 голос
/ 27 мая 2011

В камере вам нужно заново создать вид, изменив поле зрения на меньшее значение:

Matrix.CreatePerspectiveFieldOfView(
    MathHelper.PiOver4,                    // change this to, say 20°
    aspectRatio,
    0.0001f,
    1000.0f,
    out projection
);

Теперь это изменение является глобальным, поскольку вы используете проекцию камеры в своих эффектах

...