Если вы установите матрицу масштабирования в SpriteBatch.Begin
, то она будет масштабировать размеры и позиции каждого спрайта, который вы рисуете, с этим SpriteBatch
до тех пор, пока вы не вызовете End
.
SpriteBatch
использует пространство клиента, где ноль - верхний левый угол Viewport
, а одна единица в этом пространстве эквивалентна одному пикселю в области просмотра.
Когда вы задаете SpriteBatch
трансформация, спрайты, которых вы рисуете, будут применены к ним для вас, прежде чем они будут нарисованы.Таким образом, вы можете (и должны) использовать эту же технику, чтобы перевести вашу сцену (например, чтобы центрировать ее на своем плеере).
Например:
Ваша играразработан на 720p, и вы используете SpriteBatch
без преобразования.У вас есть спрайт по центру в правом нижнем углу.Скажем, его текстура (32, 32) пикселей, а спрайт origin
равен (16, 16) (источник указан в текстурном пространстве, так что это центр спрайта).У спрайта position
есть (1280, 720).Спрайт scale
равен 1, что дает его итоговый размер (32, 32).Вы увидите верхнюю левую четверть спрайта в правом нижнем углу экрана.
Теперь вы переходите к экрану с разрешением 1080p (в 1,5 раза больше, чем 720p).Если вы не добавляете масштабирующую матрицу к SpriteBatch
, вы можете увидеть весь спрайт с его двумя третями экрана, вправо и вниз.
Но вы хотитемасштабировать всю сцену так, чтобы в 1080p она выглядела так же, как в 720p.Таким образом, вы добавляете матрицу Matrix.CreateScale(1.5f, 1.5f, 1f)
(обратите внимание, что для оси Z используется 1, потому что это 2D, а не 3D) к вашему SpriteBatch.Begin
и ничего не делаете .
Теперь ваша сценаспрайты будут масштабироваться в 1,5 раза больше.Без каких-либо изменений в реальном вызове Draw
ваш спрайт будет отображен в позиции (1920, 1080) (нижний правый угол экрана), его размер будет (48, 48) (в 1,5 раза больше), иего происхождение все еще будет центром.Вы увидите верхний левый квадрант спрайта в правом нижнем углу экрана, точно так же, как в 720p и в том же относительном размере.