- Используйте матрицу для определения опорного кадра камеры.
- Используйте разделение пространства, чтобы разделить ваш уровень на экраны / окна.
Думайте о своем спрайте игрока как о любом другом объекте, например о врагах и интерактивных объектах.
Теперь вам нужна абстракция камеры. Вы можете определить камеру как матрицу 3x3 с помощью этого макета:
[rotX_X, rotY_X, 0]
[rotX_Y, rotY_Y, 0]
[transX, transY, 1]
Подматрица 2x2 в верхнем левом углу - это матрица вращения. transX и transY определяют часть перевода, то есть источник. Вы также получаете масштабирование бесплатно. Просто масштабируйте вращающуюся часть с помощью скаляра, и вы получите масштаб.
Для правильной работы с вращением ваши спрайты должны быть полигонами / примитивами, например, треугольниками или квадратами; Вы не можете просто применить матрицу к позициям спрайтов при рисовании. Если вам не нужно вращение, просто трансформация центральной точки будет работать нормально.
Если вы хотите, чтобы камера следовала за игроком, используйте позицию игрока в качестве источника камеры. Это вектор трансляции [transX, transY]
Так как же применить матрицу к позициям сущностей и вершинам модели? Вы делаете умножение вектора на матрицу.
v '= vM ^ -1 , где v' - новый вектор, v - старый вектор, а M ^ -1 - обратная матрица. Камера должна быть обратным преобразованием, потому что она определяет локальную систему координат. Можно привести аналогию: если вы находитесь передо мной, и я поворачиваю налево от своей системы отсчета, я поворачиваю вас направо. Это относится ко всем аффинным и линейным преобразованиям, таким как масштабирование, вращение и перевод.
Разделите ваш уровень на части, чтобы вы могли отбирать объекты и декорации, которые не нужно визуализировать. Ваш видовой экран имеет определенный размер / разрешение. Отображать только пейзажи и объекты, которые пересекаются с вашим окном просмотра. Вместо того, чтобы проверять каждую сущность на соответствие границам области просмотра, назначьте каждую сущность определенному подэкрану и протестируйте границы подэкрана с границами области просмотра и камеры. Если вы разделите свои уровни на части, которые имеют размер, равный размеру вашего окна просмотра, то максимальное количество видимых экранов
в любое конкретное время:
- 2, если ваша камера прокручивает только влево и вправо.
- 4, если ваша камера прокручивает влево, вправо, вверх и вниз.
- 4, если камера прокручивается в любом направлении и дополнительно может вращаться.
Смена экрана - это событие, которое можно использовать для активации объектов, принадлежащих этому экрану. Это могут быть враги, фоновые анимации, двери или что угодно.