Возьмем, к примеру, простую игру с боковой прокруткой. Когда игрок отходит в сторону, камера следует за ним. Это означает, что расположение объектов в мире не обязательно соответствует их местонахождению на экране, поскольку экран и мир движутся относительно друг друга.
Вот пример: скажем, ваш экран имеет размер 100 пикселей * 100 пикселей (по какой-то причине). Вы помещаете объект в позицию (50, 0), так что теперь он находится посередине и внизу экрана. Теперь предположим, что вы перемещаете проигрыватель вправо, и весь экран перемещается вслед за игроком. Это означает, что объект, который вы разместили ранее, должен был сместиться влево на экране. Так что он по-прежнему находится в точке (50, 0) в мире, так как на самом деле он не двигался относительно остальной части пейзажа, но теперь он должен быть нарисован, скажем, в (10, 0) на экране, поскольку какая часть мир, на который смотрит экран, изменился. В этом разница между «мировым пространством» (где объект находится в мире) и «экранным пространством» (где объект отображается на фактическом дисплее).
Когда вы пытаетесь рисовать с помощью SpriteBatch
, по умолчанию предполагается, что координаты мирового пространства совпадают с координатами экранного пространства: когда вы говорите «нарисовать в (50, 0)», он будет рисовать объект в (50, 0) на экране. Даже если камера движется, она всегда будет рисовать в точке (50, 0) на экране, поэтому при панорамировании камеры объект будет следовать за ним и оставаться на одном и том же месте на экране.
Поскольку обычно вы этого не хотите, вы даете SpriteBatch
матрицу проекции, которая представляет собой матрицу преобразования, которая сообщает, как преобразовывать координаты экранного пространства в координаты мирового пространства и наоборот. Таким образом, когда вы говорите пакету «нарисовать в (50, 0)», он может посмотреть на матрицу, полученную от камеры, и увидеть, что, поскольку камера сдвинулась, (50, 0) в мире на самом деле означает ( 10, 0) на экране, и он отрисует ваш спрайт в нужном месте.
person
Community
schedule
20.04.2016