Итак, благодаря многим ответам с этой доски, я гораздо лучше понимаю, что скрывается под капотом, но мне просто нужно немного больше, чтобы получить твердое понимание.Итак, я читаю часть уроков Римера здесь:
http://www.riemers.net/eng/Tutorials/XNA/Csharp/Series2D/Coll_Detection_Matrices.php
Я буду использовать пример каретки, так как он довольно прост.
Итак, последовательность преобразований длякаретка выглядит так:
1: Matrix.Identity;
2: Matrix.CreateTranslation(xPos, yPos, 0)
3: Matrix.CreateScale(playerScaling)
4: Matrix.CreateTranslation(0, -carriage.Height, 0)
Итак, мои вопросы таковы:
Riemer заявляет:
1: если бы мы визуализировали изображение таким, как оно есть(или: с преобразованием Identity), оно будет отображаться в своем первоначальном размере в верхнем левом углу экрана.
- Я не понимаю, в каком контексте это применимо,Имеет ли он в виду тот факт, что перед розыгрышем все изображения начинаются с начала координат мира 0,0?Или он говорит, что, когда эти преобразования вступят в силу, источник объекта теперь будет помещен в верхний левый угол и переведен обратно в начало мира?
2: Во-первых,изображение каретки перемещается, поэтому его верхняя левая точка находится в позиции, указанной в качестве второго аргумента в методе SpriteBatch.Draw.
Хорошо, он говорит, что это то, что происходит под капотом для того, что происходит во время метода рисования, или что он просто передает тот же параметр, что и то, что вы отправляете в метод рисования?
4: Наконец, и это самый сложный шаг: изображение перемещается по оси Y, поскольку в нашем методе SpriteBatch.Draw мы указали (0, carriageTexture.Height) в качестве источника.Очень важно: оно перемещается по собственной оси Y, , которое было уменьшено.Таким образом, вместо перемещения на 39 пикселей экрана, каретки будут перемещаться вертикально на 39 * 0,4 = 16 пикселей (поскольку carriageTexture.Height = 39 и playerScaling = 0,4).
Хорошо, мы позиционируем вещи с использованием этих матриц в нашем пространстве мира / экрана.Когда вы уменьшаете что-то, я не понимаю, почему оно теперь начнет двигаться в соответствии с локальным пространством объекта.Например, наша первая матрица перевода сместилась в соответствии с пространством мира / экрана, но теперь он заявляет, что «она перемещается по своей оси Y».
Почему матрица тождественности необязательна?
Таким образом, у меня возникли проблемы с подключением метода рисования к этим умножениям матриц, что за дело с объектом, направляющимся в начало мира, и почему трансляция создания изменила свое поведение.