Quando e como evitar o uso de nós para tudo

Nós são baratos de produzir, mas até eles têm os seus limites. Um projeto pode ter dezenas de milhares de nós fazendo coisas. Quanto mais complexo for o seu comportamento, maior será a tensão que cada um adiciona ao desempenho de um projeto.

O Godot fornece objetos mais leves para a criação de APIs que os nós usam. Lembre-se de ter isso em mente como opções ao projetar como deseja construir os recursos do seu projeto.

  1. Object: O supremo objeto leve, o Objeto original deve usar gerenciamento manual de memória. Dito isso, não é muito difícil criar suas próprias estruturas de dados personalizadas, mesmo estruturas de nós, que também são mais leves que a classe Node.

    • Exemplo: Veja o nó Tree. Ele suporta um alto nível de personalização para uma tabela de conteúdo com um número arbitrário de linhas e colunas. Os dados que ele utiliza para gerar sua visualização são na verdade uma árvore de Objetos TreeItem.

    • Vantagens: A simplificação da API para objetos com escopo menor ajuda a melhorar sua acessibilidade e melhorar o tempo de iteração. Ao invés de trabalhar com toda a biblioteca de Nós, cria-se um conjunto abreviado de Objetos a partir dos quais um nó pode gerar e gerenciar os sub-nós apropriados.

    Nota

    Deve-se ter cuidado ao manuseá-los. É possível armazenar um Objeto em uma variável, mas essas referências podem se tornar inválidas sem aviso prévio. Por exemplo, se o criador do objeto decidir excluí-lo do nada, isso acionaria um estado de erro no próximo acesso.

  2. Reference: Apenas um pouco mais complexo que Object. Eles rastreiam referências a eles mesmos, apagando apenas a memória carregada quando não há mais referências a eles mesmos. Elas são úteis na maioria dos casos em que se precisa de dados em uma classe personalizada.

    • Exemplo: Veja o objeto File. Ele funciona como um Objeto normal, exceto que não é necessário excluí-lo.

    • Vantagens: o mesmo que o Objeto.

  3. Resource: Apenas um pouco mais complexo que Reference. Eles têm a capacidade inata de serializar/deserializar (ou seja, salvar e carregar) suas propriedades de/para arquivos de recursos do Godot.

    • Exemplo: Scripts, PackedScene (para arquivos de cena), e outros tipos como cada uma das classes AudioEffect. Cada uma delas pode ser salva e carregada, portanto elas se estendem de Resource.

    • Vantagens: Muito já foi dito sobre as vantagens de Resource em relação aos métodos tradicionais de armazenamento de dados. No contexto da utilização de Recursos sobre Nós, porém, sua principal vantagem está na compatibilidade com o Inspetor. Embora quase tão leves quanto Objeto/Referência, eles ainda podem exibir e exportar propriedades no Inspetor. Isso permite que eles cumpram um propósito muito parecido com os sub-nós na frente de usabilidade, mas também melhora o desempenho se alguém planeja ter muitos desses Recursos/Nós em suas cenas.