O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

[GMS2] Entendendo as Câmeras

Iniciado por Kawthar, 05/05/2018 às 11:23

05/05/2018 às 11:23 Última edição: 17/07/2019 às 19:34 por Kawthar
[box2 class=titlebg title=Vem sempre por aqui?]Olá, povo. Bom tempo que eu não participo por aqui \o/

To estudando GMS2 agora e decidi criar esse tópico pra ajudar quem tiver dúvidas em relação às câmera(evolução das extintas views do GMS 1.x).

O conteúdo do tópico é, basicamente, uma tradução de um vídeo do Shaun Spalding. Então, caso você saiba inglês, recomendo que veja o vídeo dele(no final do tópico) que provavelmente vai ser mais fácil de entender.[/box2]




[box2 class=titlebg title=Índice][/box2]




[box2 class=titlebg title=O que é uma Câmera?]
Indo direto ao ponto, a câmera determina como o jogador vê seu mundo do jogo.

É uma feature nova do GameMaker Studio 2 que veio pra substituir as Views que era uma forma mais abstrata de se manipular esses aspectos.
Pra podermos entender o que é uma câmera, fica mais fácil entendendo primeiro o que era uma View e determinando suas diferenças com as câmeras.

Uma View, a qual você pode definir pelo editor de salas do GMS, representa um simples retângulo que determina uma área do mundo que está sendo mostrada ao jogador.

A mesma é mostrada através da Viewport que representa a janela do seu jogo(não confundir os 2).

Já no GMS2 você pode ir um nível acima criando e manipulando uma Câmera que é um ponto no espaço com o qual, com suas propriedades, define-se o que e como vai aparecer na View. Ou seja, a View na sala é o resultado dessa câmera.

E é por isso que alguns valores simples da versão anterior do GMS, como view_xview, não existem mais da forma como existiam pois suas coordenadas, nesse caso representando a parte esquerda da View não é mais uma variável "mutável", ao invés disso agora é o resultado das propriedades da câmera.

O mesmo resultado dessa propriedade poderia vir de uma posição, ângulo ou aspect ratio da câmera diferente. Então para poder mudar a parque esquerda da View você vai precisar mexer a câmera de um jeito específico.


Esse sistema realmente adiciona complexidade mas tem seus benefícios até mesmo pra quem já estava acostumado com a forma como as Views funcionavam nas versões anteriores do GMS.
[/box2]




[box2 class=titlebg title=Básico das câmeras]
A forma como as câmeras funcionam é relativamente simples.

Primeiro precisamos criar uma câmera através do
cam = camera_create();
onde cam é uma variável na qual você irá armazenar uma câmera vazia.

A construção da câmera consiste de 2 matrizes. Essas matrizes contém as propriedades da câmera.

A primeira matriz é a View Matrix ou look-at Matrix a qual define a posição e ângulo da câmera num espaço 3D(X, Y, Z).
É definida usando:
matrix_build_lookat(xfrom, yfrom, zfrom, xto, yto, zto, xup, yup, zup);

Sendo xfrom, yfrom e zfrom a posição de origem(de onde está olhando),
xto, yto, zto a posição para onde olhar e a direção
xup, yup e zup que define a posição/angulo da câmera no jogo.

A segunda matriz é chama de Projection Matrix, seria algo como definir as lentes? da câmera do jogo. Ela determina a perspectiva, a largura, a altura e a distância que a câmera consegue "ver". O padrão para um jogo 2D é uma Projection Matrix to tipo Ortográfica(flat) enquanto para jogos 3D essa matriz tem usos específicos.

Ela pode ser definida usando:
matrix_build_projection_ortho(width, height, znear, zfar);

Onde width é a largura,
height é a altura,
znear é o alcance mínimo e
zfar é o alcance máximo no qual você quer que a câmera renderize os elementos.
[/box2]

[box2 class=titlebg title=Conclusão]
Então temos que criando uma câmera, definindo essas propriedades e aplicando-as à câmera e, finalmente, aplicando a câmera ao viewport(janela do jogo) podemos controlar o que vemos na tela.

Esse sistema traz muitas novas opções pros desenvolvedores decidirem o que e como os jogadores verão seu jogo.

Caso mesmo com todas essas informações você ainda não engoliu a mudança e adoraria ter só o antigo sistema de views porque não precisa de todas essas opções ou algo assim não precisa se preocupar porque a YoYo, provavelmente pensando nas pessoas que migrou do GMS1.x e até nos iniciantes mesmo, deixou ainda uma forma de se criar views de uma forma abstrata no GMS2.

Nesse caso você só precisa definir a View no próprio editor da sala OU usando a função
camera_create_view(room_x, room_y, width, height, [angle, object, x_speed, y_speed, x_border, y_border]);
Essa forma resulta numa câmera simples com o aspecto de uma view 2D comum muito similar a como funcionava no GMS 1.x. Depois disso você pode manipular a view usando vários setters como camera_set_view_pos, camera_set_view_size, camera_set_view_speed, etc.
[/box2]

[box2 class=titlebg title=Shaun Spalding]Caso alguém queria ver o vídeo de onde tirei toda a informação(citado no começo do tópico) aqui está:


Recomendo demais o canal dele, assim como sempre recomendo o canal do uHeartBeast  :paperplease:[/box2]
Lord, if the day comes when I fly through the heavens. I shall approach thee!