Как реализовать параллаксную прокрутку в 2D?

Ответы:

20

Разделите положение каждого слоя на «расстояние», которое вы хотите, чтобы оно было от камеры.

Например: создайте пару переменных для представления положения камеры cameraXи cameraY. Установите их так, чтобы они равнялись положению вашего персонажа, возможно добавляя немного больше в направлении движения.

Основной слой будет просто расположен в

mainLayer.x = -cameraX;

средний слой в чем-то вроде

middleLayer.x = -cameraX * 0.5;

и дальний слой в

farLayer.x = -cameraX * 0.2;

Измените константы по мере необходимости.

Iain
источник
3
То, что сказал Iain, плюс я беру «коэффициент параллакса» (1, 0,5 и 0,2 в коде Iain) и делаю его параметром, описывающим мои слои, чтобы я мог регулировать тонкость параллакса (или во время выполнения).
Трой Гилберт
6

По сути, вы хотите, чтобы объекты двигались быстрее, чем ближе они к «камере». Как вы реализуете это зависит от вас.

Я назначаю каждому из своих слоев глубину, а затем, прокручивая сцену, для каждого слоя я делю эту прокрутку на глубину слоя, чтобы слои, которые находятся дальше, двигались медленнее.

Кевин Лэйти
источник
5

Слой, который находится «дальше назад», должен был бы прокручиваться с долей скорости переднего слоя. Половина скорости подразумевает двойное расстояние. Другие эффекты, такие как тонирование для имитации тумана и т. Д., Также могут добавить к иллюзии.

Karantza
источник
1

Лучший способ сделать это - просто визуализировать спрайты в виде квадратов с билбордами в 3D. «Геймплей» может происходить в одной плоскости, а фон и передний план могут располагаться ближе или дальше в трехмерном пространстве. Таким образом, эффект параллакса обрабатывается для вас без какого-либо специального кодирования :-)

Джоэл Мартинес
источник
3
Если вы сделаете это, вам придется либо увеличить свои дальние квадраты, чтобы компенсировать масштабирование расстояния, либо настроить матрицу проекции, которая не применяет какую-либо перспективу. Возможно, вам будет проще самим переводить квады.
Великолепно
0

Сделайте прокрутку нижнего слоя, вычитая из его положения, нарисуйте средний слой как обычно и сделайте прокрутку верхнего слоя со скоростью нижнего слоя, деленной на два.

Сэм
источник