Como implemento a rolagem de paralaxe em 2D?

21

Suponha que eu tenha três camadas: um primeiro plano, um meio intermediário e um segundo plano. O que está envolvido no uso dessas três camadas para criar rolagem de paralaxe ?

Bryan Denny
fonte

Respostas:

20

Divida a posição de cada camada pela "distância" que você deseja que ela tenha da câmera.

Por exemplo: Crie algumas variáveis ​​para representar a posição da câmera cameraXe cameraY. Defina-os para igualar a posição do seu personagem, possivelmente adicionando um pouco mais na direção do movimento.

A camada principal seria posicionada apenas em

mainLayer.x = -cameraX;

a camada do meio em algo como

middleLayer.x = -cameraX * 0.5;

e a camada mais distante em

farLayer.x = -cameraX * 0.2;

Mude as constantes conforme necessário.

Iain
fonte
3
O que Iain disse, além de pegar o "fator de paralaxe" (1, 0,5 e 0,2 no código de Iain) e torná-lo um parâmetro que descreve minhas camadas, para que eu possa ajustar a sutileza da paralaxe (ou em tempo de execução).
Troy Gilbert
6

Basicamente, você deseja que os objetos se movam mais rapidamente, quanto mais próximos eles estiverem da 'câmera'. Como você implementa isso é com você.

Atribuo uma profundidade a cada uma das minhas camadas e, em seguida, ao rolar a cena, divido esse rolo pela profundidade da camada, para que as camadas mais distantes se movam mais devagar.

Kevin Laity
fonte
5

Uma camada que está "mais para trás" precisaria rolar a uma fração da velocidade da camada de primeiro plano. Metade da velocidade implica o dobro da distância. Outros efeitos, como tingir para simular nevoeiro, etc, também podem aumentar a ilusão.

Karantza
fonte
1

A melhor maneira de fazer isso é simplesmente renderizar sprites como quads de outdoor em 3D. A "jogabilidade" pode acontecer em um único plano, enquanto o plano de fundo e o primeiro plano podem ser posicionados mais perto ou mais longe no espaço 3D. Dessa forma, o efeito de paralaxe é tratado para você sem que você precise fazer nenhuma codificação especial :-)

Joel Martinez
fonte
3
Se você fizer isso, precisará escalar seus quadriláteros distantes para compensar a escala da distância ou configurar uma matriz de projeção que não aplique nenhuma perspectiva. Pode ser mais fácil traduzir os quadríceps você mesmo.
116810
0

Faça a rolagem da camada inferior subtraindo de sua posição, desenhe a camada intermediária normalmente e faça a rolagem da camada superior na velocidade da camada inferior dividida por dois.

Sam
fonte