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