Up to date

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

Aplicando los principios orientados a objetos en Godot

El motor ofrece dos formas principales de crear objetos reutilizables: scritps y escenas. Ninguna de ellas define técnicamente las clases por debajo.

Aún así, muchas de las mejores prácticas usando Godot implican aplicar los principios de la programación orientada a objetos a los scripts y escenas que componen su juego. Por eso es útil entender cómo podemos pensar en ellos como clases.

Esta guía explica brevemente cómo funcionan los guiones y escenas en el núcleo del motor para ayudarlo a comprender cómo funcionan bajo el capó.

Cómo funcionan los scripts en el motor

El motor provee clases internas como Node. Puedes extenderlas para crear tipos derivados usando un script.

Estos scripts no son técnicamente clases. En cambio, son recursos que le dicen al motor una secuencia de inicializaciones para realizar en una de las clases integradas del motor.

Las clases internas de Godot tienen métodos que registran los datos de una clase mediante una ClassDB. Esta base de datos proporciona acceso en tiempo de ejecución a información de la clase. ClassDB contiene información sobre las clases como:

  • Propiedades.

  • Métodos.

  • Constantes.

  • Señales.

Esta ClassDB es lo que los objetos verifican cuando realizan una operación como acceder a una propiedad o llamar a un método. Comprueba los registros de la base de datos y los registros de tipos base del objeto para ver si el objeto admite la operación.

Uniendo un Script a tu objeto extiende los métodos, propiedades y señales disponibles de la ClaseDB.

Nota

Incluso los scripts que no usan la palabra clave extends heredan implícitamente de la clase base del motor RefCounted. Como resultado, puedes crear instancias de scripts sin la palabra clave extends del código. Sin embargo, dado que extienden RefCounted, no puedes adjuntarlos a un Node.

Escenas

El comportamiento de las escenas tiene muchas similitudes con las clases, por lo que puede tener sentido pensar en una escena como una clase. Las escenas son grupos de nodos reutilizables, instantáneos y heredables. Crear una escena es similar a tener un script que crea nodos y los agrega como niños usando add_child().

A menudo emparejamos una escena con un nodo raíz con script que hace uso de los nodos de la escena. Como tal, el script extiende la escena al agregarle un comportamiento mediante código imperativo.

El contenido de una escena ayuda a definir:

  • Qué nodos están disponibles al script.

  • Cómo están organizados.

  • Cómo se inicializan.

  • Qué conexiones de señales tienen entre ellos.

¿Por qué es algo de esto importante para la organización de la escena? Porque las instancias de escenas * son * objetos. Como resultado, muchos principios orientados a objetos que se aplican al código escrito también se aplican a escenas: responsabilidad única, encapsulación y otros.

La escena es siempre una extensión del script adjunto a su nodo raíz, por lo que puede interpretarla como parte de una clase.

La mayoría de las técnicas explicadas en esta serie de mejores prácticas se basan en este punto.