Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Aplicando princípios de orientação a objetos em Godot

O motor oferece duas maneiras principais de criar objetos reutilizáveis: scripts e cenas. Nenhum deles define tecnicamente as classes subjacentes.

Ainda assim, muitas das melhores práticas usando o Godot envolvem a aplicação de princípios de programação orientada a objetos aos scripts e cenas que compõem seu jogo. É por isso que é útil entender como podemos pensar neles como classes.

Este guia explica resumidamente como os scripts e as cenas funcionam no núcleo do motor para ajudá-lo a entender como eles funcionam nos bastidores.

Como os scripts funcionam no motor

O motor fornece classes incorporadas como Node. Você pode estendê-las para criar tipos derivados usando um script.

Esses scripts não são tecnicamente classes. Em vez disso, são recursos que informam ao motor uma sequência de inicializações para executar em uma das classes integradas do motor.

As classes internas do Godot possuem métodos que registram os dados de uma classe com um :ref: ClassDB <class_ClassDB>. Este banco de dados fornece acesso em tempo de execução às informações da classe. ClassDB contém informações sobre classes como:

  • Propriedades.

  • Métodos.

  • Constantes.

  • Sinais.

Este ClassDB é o que os objetos verificam ao realizar uma operação como acessar uma propriedade ou chamar um método. Ele verifica os registros do banco de dados e os registros dos tipos base do objeto para ver se o objeto suporta a operação.

Anexar um Script ao seu objeto estende os métodos, propriedades e sinais disponíveis da ClassDB.

Nota

Mesmo os scripts que não usam a palavra-chave extends herdam implicitamente da classe RefCounted da base do motor. Como resultado, você pode instanciar scripts sem a palavra-chave extends do código. Uma vez que eles estendem RefCounted, você não pode anexá-los a um Node.

Cenas

O comportamento das cenas tem muitas semelhanças com as classes, então pode fazer sentido pensar em uma cena como uma classe. As cenas são grupos de nós reutilizáveis, instanciados e herdáveis. Criar uma cena é semelhante a ter um script que cria nós e os adiciona como filhos usando add_child().

We often pair a scene with a scripted root node that makes use of the scene's nodes. As such, the script extends the scene by adding behavior through imperative code.

O conteúdo de uma cena ajuda a definir:

  • Quais nós estão disponíveis para o script.

  • Como eles são organizados.

  • Como eles são inicializados.

  • Que conexões de sinal eles têm uns com os outros.

Por que isto é importante para a organização da cena? Porque instâncias de cenas são objetos. Como resultado, muitos princípios de orientação a objetos que se aplicam ao código escrito também se aplicam a cenas: responsabilidade única, encapsulamento e outros.

A cena é sempre uma extensão do script anexado ao seu nó raiz, então você pode interpretá-la como parte de uma classe.

A maioria das técnicas explicadas nesta série de melhores práticas se baseia neste ponto.