Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Sistemas de coordenadas 2D e transformações 2D
Introdução
Esta é uma visão geral detalhada dos sistemas de coordenadas 2D e transformações 2D integrados disponíveis. Os conceitos básicos são abordados em Transformações de janela de exibição e tela.
As Transform2D são matrizes que convertem coordenadas de um sistema de coordenadas para outro. Para usá-las, é benéfico saber quais sistemas de coordenadas estão disponíveis no Godot. Para uma compreensão mais profunda, o tutorial Matrizes e transformações oferece informações sobre a funcionalidade subjacente.
Sistemas de coordenadas 2D do Godot
O gráfico a seguir fornece uma visão geral dos sistemas de coordenadas 2D do Godot e as transformações de nós, funções de transformação e funções relacionadas ao sistema de coordenadas disponíveis. À esquerda está a tela do Gerenciador de Janelas do S.O., à direita estão os CanvasItems. Por razões de simplicidade, este gráfico não inclui SubViewport, SubViewportContainer, ParallaxLayer e ParallaxBackground, todos os quais também influenciam as transformações.
O gráfico é baseado em uma árvore de nós da seguinte forma: Janela Raiz (incorporar Janelas) ⇒ Janela (não incorporar Janelas) ⇒ CanvasLayer ⇒ CanvasItem ⇒ CanvasItem ⇒ CanvasItem. Combinações mais complexas são possíveis, como Janelas e SubViewports profundamente aninhados, no entanto, este exemplo pretende fornecer uma visão geral da metodologia em geral.
Clique no gráfico para ampliar.
- Coordenadas de Item
Este é o sistema de coordenadas local de um CanvasItem.
- Coordenadas de Item Pai
Este é o sistema de coordenadas local do CanvasItem pai. Ao posicionar CanvasItems no Canvas, eles geralmente herdam as transformações de seus CanvasItems pais. Uma exceção é CanvasItems.top_level.
- Coordenadas de Canvas
Como mencionado no tutorial anterior Camadas de canvas, existem dois tipos de telas (tela de Viewport e tela de CanvasLayer) e ambas têm um sistema de coordenadas de tela (canvas). Estas também são chamadas de coordenadas de mundo. Um Viewport pode conter múltiplos Canvases com diferentes sistemas de coordenadas.
- Coordenadas de Viewport
Este é o sistema de coordenadas do Viewport.
- Coordenadas de Câmera
Isso é usado apenas internamente para funcionalidades como projeções de raios de câmera 3D.
- Coordenadas do Incorporador / Coordenadas de Tela
Cada Viewport (Window ou SubViewport) na árvore de cenas está incorporado em um nó diferente ou no Gerenciador de Janelas do S.O. A origem deste sistema de coordenadas é idêntica ao canto superior esquerdo da Window ou SubViewport e sua escala é a do incorporador ou do Gerenciador de Janelas do S.O.
Se o incorporador for o Gerenciador de Janelas do S.O., elas também são chamadas de Coordenadas de Tela.
- Coordenadas Absolutas do Incorporador / Coordenadas Absolutas de Tela
A origem deste sistema de coordenadas é o canto superior esquerdo do nó incorporador ou da tela do Gerenciador de Janelas do S.O. Sua escala é a do incorporador ou do Gerenciador de Janelas do S.O.
Se o incorporador for o Gerenciador de Janelas do S.O., elas também são chamadas de Coordenadas Absolutas de Tela.
Transformações de nó
Cada um dos nós mencionados possui uma ou mais transformações associadas a eles e a combinação desses nós infere as transformações entre os diferentes sistemas de coordenadas. Com poucas exceções, as transformações são Transform2D e a lista a seguir mostra detalhes e efeitos de cada uma delas.
- Transformação de CanvasItem
CanvasItems são nós Control ou nós Node2D.
Para nós Control, essa transformação consiste em uma posição relativa à origem do pai e uma escala e rotação em torno de um ponto de pivô.
Para nós Node2D, a transformação consiste em posição, rotação, escala e inclinação (skew).
A transformação afeta o próprio item e geralmente também os CanvasItems filhos e, no caso de um SubViewportContainer, afeta o SubViewport contido.
- Transformação de CanvasLayer
A transformação do CanvasLayer afeta todos os CanvasItems dentro do CanvasLayer. Ela não afeta outros CanvasLayers ou Windows em seu Viewport.
- Transformação de seguir viewport do CanvasLayer
A transformação de seguir viewport é uma transformação calculada automaticamente, baseada na transformação de tela do Viewport e na escala de seguir viewport do CanvasLayer e pode ser usada, se ativada, para alcançar um efeito pseudo-3D. Ela afeta os mesmos nós filhos que a transformação do CanvasLayer.
- Transformação de canvas de Viewport
A transformação de tela afeta todos os CanvasItems na tela padrão do Viewport. Ela também afeta os CanvasLayers que têm a transformação de seguir viewport ativada. A Camera2D ativa do Viewport funciona alterando essa transformação. Ela não afeta as Windows incorporadas deste Viewport.
- Transformação global de canvas de Viewport
Viewports também possuem uma transformação de canvas global. Esta é a transformação mestre e afeta todas as transformações individuais de Canvas Layer e Window incorporadas. Isso é usado principalmente no Editor de CanvasItem do Godot.
- Transformação de estiramento da Viewport
Finalmente, os Viewports possuem uma transformação de esticamento (stretch transform), que é usada ao redimensionar ou esticar o viewport. Essa transformação é usada para Windows conforme descrito em Resoluções múltiplas, mas também pode ser definida manualmente em SubViewports por meio de size e size_2d_override. Sua translação, rotação e inclinação são os valores padrão e ela só pode ter escala não padrão.
- Transformação da Janela
Para dimensionar e posicionar o conteúdo da Window conforme descrito em Resoluções múltiplas, cada Window contém uma transformação de janela. Ela é, por exemplo, responsável pelas barras pretas nas laterais da Window para que o Viewport seja exibido com uma proporção (aspect ratio) fixa.
- Posição da Janela
Toda Window também possui uma posição para descrever sua posição dentro de seu incorporador. O incorporador can pode ser outro Viewport ou o Gerenciador de Janelas do S.O.
- Transformação de encolhimento do SubViewportContainer
stretch junto com stretch_shrink declaram para um SubViewportContainer se e por qual fator inteiro o SubViewport contido deve ser dimensionado em comparação com o tamanho do contêiner.