Creating instances¶
Na parte anterior, nós vimos que uma cena é uma coleção de nós organizados em uma estrutura de árvore, com um único nó como sua raiz. Você pode dividir seu projeto em qualquer número de cenas. Essa funcionalidade ajuda você a dividir e organizar os diferentes componentes do seu jogo.
You can create as many scenes as you'd like and save them as files with the
.tscn
extension, which stands for "text scene". The Label.tscn
file from
the previous lesson was an example. We call those files "Packed Scenes" as they
pack information about your scene's content.
Here's an example of a ball. It's composed of a RigidBody2D node as its root named Ball, which allows the ball to fall and bounce on walls, a Sprite node, and a CollisionShape2D.

Once you saved a scene, it works as a blueprint: you can reproduce it in other scenes as many times as you'd like. Replicating an object from a template like this is called instancing.

Como mencionámos na parte anterior, as cenas instanciadas se comportam como um nó: o editor esconde o seu conteúdo por padrão. Quando você instancia a Bola, você vê apénas o nó Bola. Note também que cada duplicata tem um nome único.
Cada instância da cena Ball começa com a mesma estrutura e propriedades que Ball.tscn
. Porém, você pode modificar cada uma independentemente, tal como mudar como ela quica, o quão pesada ela é, ou qualquer propriedade exposta pela cena de origem.
In practice¶
Let's use instancing in practice to see how it works in Godot. We invite
you to download the ball's sample project we prepared for you:
instancing.zip
.
Extraia o arquivo em seu computador. Depois, abra o Godot e no gerenciador de projects, clique no botão Importar para importar o projeto.

No pop-up que apareceu, clique o botão explorar e navegue até a pasta que você extraiu.

Clique duas vezes no arquivo ``project.godot ` para abri-lo.

Por fim, clique no botão Importar & Editar.

O projeto contém duas Cenas Empacotadas: Main.tscn
, contendo paredes contra as quais a bola colide, e Ball.tscn
. A cena principal deve abrir automaticamente.

Vamos adicionar uma bola como um filho do nó principal. Na doca de Cena, selecione o nó Principal. Depois, clique no ícone de ligação na parte superior da doca de cena. Este botão permite-lhe adicionar uma instância de uma cena como filho do nó atualmente selecionado.

Clique duas vezes na cena da bola para instancia-la.

The ball appears in the top-left corner of the viewport.

Clique nele e arraste-o para o centro da visualização.

Aperte F5 para jogar o jogo. Você deve vê-la cair.
Agora, queremos criar mais instâncias do nó Bola. Com a bola ainda selecionada, aperte Ctrl-D (Cmd-D no macOS) para chamar o comando duplicar. Clicque e arraste para mover a nova bola para um local diferente.

Você pode repetir esse processo até que você tenha vários na cena.

Jogue o jogo novamente. Agora você deve ver cada bola cair independentemente de uma da outra. Isso é o que instâncias fazem. Cama uma é uma reprodução independente de uma cena modelo.
Editing scenes and instances¶
Instâncias possuem mais do que isso. Com essa funcionalidade, você pode:
Change the properties of one ball without affecting the others using the Inspector.
Change the default properties of every Ball by opening the
Ball.tscn
scene and making a change to the Ball node there. Upon saving, all instances of the Ball in the project will see their values update.
Nota
Mudar uma propriedade em uma instância sempre terá prioridade sobre os valores da Cena Empacotada correspondente.
Vamos testar isso. Abra ``Ball.tscn``e selecione o nó Ball. No Inspetor à direita, clique na propriedade PhysicsMaterial para expandi-la.

Clique no campo número e digite ``2``e aperte Enter para definir a propriedade Bounce como 2.

Rode o jogo apertando :kbd:`F5`e perceba que as bolas agora quicam muito mais. Como a cena Ball é um modelo para todas as instâncias, modificar e salvá-la causa que todas as instâncias atualizem de acordo.
Agora vamos ajustar uma instância individual. Clique na aba correspondente acima da janela de exibição para voltar para a cena Main.

Selecione um dos nós Ball instanciados e, no Inspetor, mude sua Escala de Gravidade para 10
.

Um botão cinza de "reverter" aparecerá perto da propriedade ajustada.

This icon indicates you are overriding a value from the source packed scene. Even if you modify the property in the original scene, the value override will be preserved in the instance. Clicking the revert icon will restore the property to the value in the saved scene.
Rode o jogo de novo e perceba que essa bola agora caí muito mais rápida que as outras.
Nota
Se você mudar um valor no PhysicsMaterial
de uma instância, isso afetará todas as outras. Isso é porque PhysicsMaterial
é um recurso, e recursos são compartilhados entre instâncias. Para fazer um recurso único para uma instância, clique nele com o botão direito no Inspetor e clique Tornar Único no menu contextual.
Recursos são outro bloco de construção essencial de jogos Godot que cobriremos em uma lição posterior.
Instâncias de Cenas como uma linguagem de design¶
Instâncias e cenas no Godot oferecem uma excelente linguagem de design, distinguindo a engine de outras. Concebemos o Godot em torno deste conceito desde o início.
Nós recomendamos ignorar padrões de código de arquitetura, tal como o Model-View-Control (MVC) ou diagramas Relação-Entidade, ao fazer jogos com Godot. Ao invés disso, você pode começar imaginando os elementos que jogadores verão em seu jogo e estruturar seu código ao redor deles.
For example, you could break down a shooter game like so:

You can come up with a diagram like this for almost any type of game. Each rectangle represents an entity that's visible in the game from the player's perspective. The arrows tell you which scene owns which.
Once you have a diagram, we recommended creating a scene for each element listed in it to develop your game. You'll use instancing, either by code or directly in the editor, to build your tree of scenes.
Programmers tend to spend a lot of time designing abstract architectures and trying to fit components into it. Designing based on scenes makes development faster and more straightforward, allowing you to focus on the game logic itself. Because most game components map directly to a scene, using a design based on scene instantiation means you need little other architectural code.
Here's the example of a scene diagram for an open-world game with tons of assets and nested elements:

Imagine que começamos criando a sala. Poderíamos fazer algumas cenas de salas diferentes, com arranjos únicos de móveis nelas. Mais tarde, poderíamos fazer uma cena de casa que usa várias instâncias de sala para o interior. Criaríamos uma cidadela com muitas casas instanciadas e um grande terreno no qual colocaríamos a cidadela. Cada uma delas seria uma cena instanciando uma ou mais sub-cenas.
Later, we could create scenes representing guards and add them to the citadel. They would be indirectly added to the overall game world.
With Godot, it's easy to iterate on your game like this, as all you need to do is create and instantiate more scenes. We designed the editor to be accessible to programmers, designers, and artists alike. A typical team development process can involve 2D or 3D artists, level designers, game designers, and animators, all working with the Godot editor.
Resumo¶
Instanciar, o processo de produzir um objeto a partir de um plano tem muitos usos úteis. Com cenas, ele lhe dá:
A capacidade de dividir seu jogo em componentes reutilizáveis.
Uma ferramenta para estruturar e encapsular sistemas complexos.
Uma linguagem para pensar sobre a estrutura do seu projeto de jogo de uma forma natural.