Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Componentes

Componentes são usados para dar expressão e/ou funcionalidade específica aos objetos de jogo. Componentes precisam estar contidos dentro de objetos de jogo e são afetados pela posição, rotação e escala do objeto de jogo que contém o componente:

Componentes

Muitos componentes têm propriedades específicas do tipo que podem ser manipuladas, e há funções específicas do tipo de componente disponíveis para interagir com eles em tempo de execução:

-- desabilita o sprite "body" da lata
msg.post("can#body", "disable")

-- toca o som "hoohoo" em "bean" em 1 segundo
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )

Componentes são adicionados no local em um objeto de jogo ou adicionados a um objeto de jogo como referência a um arquivo de componente:

Use Right-click no objeto de jogo na visualização Outline e selecione Add Component (adicionar no local) ou Add Component File (adicionar como referência de arquivo).

Na maioria dos casos, faz mais sentido criar componentes no local, mas os seguintes tipos de componente precisam ser criados em arquivos de recurso separados antes de serem adicionados por referência a um objeto de jogo:

  • Script
  • GUI
  • Particle FX
  • Tile Map

Tipos de componente

O Defold oferece suporte aos seguintes tipos de componente:

  • Fábrica de coleção - Cria coleções
  • Proxy de coleção - Carrega e descarrega coleções
  • Objeto de colisão - Física 2D e 3D
  • Câmera - Altera o viewport e a projeção do mundo do jogo
  • Fábrica - Cria objetos de jogo
  • GUI - Renderiza uma interface gráfica de usuário
  • Rótulo - Renderiza um trecho de texto
  • Mesh Mostra uma malha 3D (com criação e manipulação em runtime)
  • Modelo Mostra um modelo 3D (com animações opcionais)
  • Particle FX - Cria partículas
  • Script - Adiciona lógica de jogo
  • Som - Reproduz som ou música
  • Sprite - Mostra uma imagem 2D (com animação flipbook opcional)
  • Tilemap - Mostra uma grade de tiles

Componentes adicionais podem ser adicionados por extensões:

Ativando e desativando componentes

Os componentes de um objeto de jogo são ativados quando o objeto de jogo é criado. Se quiser desativar um componente, faça isso enviando uma mensagem disable ao componente:

-- desativa o componente com id 'weapon' no mesmo objeto de jogo deste script
msg.post("#weapon", "disable")

-- desativa o componente com id 'shield' no objeto de jogo 'enemy'
msg.post("enemy#shield", "disable")

-- desativa todos os componentes no objeto de jogo atual
msg.post(".", "disable")

-- desativa todos os componentes no objeto de jogo 'enemy'
msg.post("enemy", "disable")

Para ativar um componente novamente, você pode enviar uma mensagem enable ao componente:

-- ativa o componente com id 'weapon'
msg.post("#weapon", "enable")

Propriedades de componentes

Os tipos de componente do Defold têm propriedades diferentes. O painel Properties no editor mostrará as propriedades do componente atualmente selecionado no painel Outline. Consulte os manuais dos diferentes tipos de componente para saber mais sobre as propriedades disponíveis.

Posição, rotação e escala de componentes

Componentes visuais geralmente têm propriedades de posição e rotação e, na maioria das vezes, também uma propriedade de escala. Essas propriedades podem ser alteradas no editor e, em quase todos os casos, não podem ser alteradas em runtime (a única exceção é a escala de componentes sprite e label, que pode ser alterada em runtime).

Se você precisa alterar a posição, rotação ou escala de um componente em runtime, modifique em vez disso a posição, rotação ou escala do objeto de jogo ao qual o componente pertence. Isso tem o efeito colateral de afetar todos os componentes no objeto de jogo. Se você quiser manipular apenas um componente específico entre muitos anexados a um objeto de jogo, recomenda-se mover o componente em questão para um objeto de jogo separado e adicioná-lo como objeto de jogo filho do objeto de jogo ao qual o componente pertencia originalmente.

Ordem de desenho dos componentes

A ordem de desenho dos componentes visuais depende de duas coisas:

Predicados do script de renderização

Cada componente recebe um material, e cada material tem uma ou mais tags. O script de renderização, por sua vez, definirá vários predicados, cada um correspondente a uma ou mais tags de material. Os predicados do script de renderização são desenhados um por um na função update() do script de renderização, e os componentes correspondentes às tags definidas em cada predicado serão desenhados. O script de renderização padrão primeiro desenha sprites e tilemaps em uma passagem, depois efeitos de partículas em outra passagem, ambos em espaço de mundo. Em seguida, o script de renderização desenha componentes GUI em uma passagem separada em espaço de tela.

Valor z do componente

Todos os objetos de jogo e componentes são posicionados em espaço 3D com posições expressas como objetos vector3. Quando você visualiza o conteúdo gráfico do seu jogo em 2D, os valores X e Y determinam a posição de um objeto ao longo dos eixos de “largura” e “altura”, e a posição Z determina a posição ao longo do eixo de “profundidade”. A posição Z permite controlar a visibilidade de objetos sobrepostos: um sprite com valor Z de 1 aparecerá na frente de um sprite na posição Z 0. Por padrão, o Defold usa um sistema de coordenadas que permite valores Z entre -1 e 1:

modelo

Os componentes correspondentes a um predicado de renderização são desenhados juntos, e a ordem em que são desenhados depende do valor z final do componente. O valor z final de um componente é a soma dos valores z do próprio componente, do objeto de jogo ao qual ele pertence e do valor z de quaisquer objetos de jogo pais.

A ordem em que vários componentes GUI são desenhados não é determinada pelo valor z dos componentes GUI. A ordem de desenho dos componentes GUI é controlada pela função gui.set_render_order().

Exemplo: dois objetos de jogo A e B. B é filho de A. B tem um componente sprite.

O quê Valor Z
A 2
B 1
B#sprite 0.5

Com a hierarquia acima, o valor z final do componente sprite em B é 2 + 1 + 0.5 = 3.5.

Se dois componentes tiverem exatamente o mesmo valor z, a ordem é indefinida, e você pode acabar com componentes piscando para frente e para trás ou componentes sendo renderizados em uma ordem em uma plataforma e em outra ordem em outra plataforma.

O script de renderização define um plano próximo e um plano distante para valores z. Qualquer componente com valor z fora desse intervalo não será renderizado. O intervalo padrão é -1 a 1, mas ele pode ser alterado facilmente. A precisão numérica dos valores Z com limites próximo e distante de -1 e 1 é muito alta. Ao trabalhar com assets 3D, talvez seja necessário alterar os limites próximo e distante da projeção padrão em um script de renderização personalizado. Veja o manual de renderização para mais informações.

Otimizações de contagem máxima de componentes

O arquivo de configurações game.project contém muitos valores que especificam o número máximo de determinado recurso que pode existir ao mesmo tempo, geralmente contado por coleção carregada (também chamada de mundo). A engine Defold usará esses valores máximos para pré-alocar memória para essa quantidade, evitando alocações dinâmicas e fragmentação de memória enquanto o jogo está em execução.

As estruturas de dados do Defold usadas para representar componentes e outros recursos são otimizadas para usar o mínimo de memória possível, mas ainda é preciso tomar cuidado ao definir os valores para evitar alocar mais memória do que realmente é necessário.

Para otimizar ainda mais o uso de memória, o processo de build do Defold analisará o conteúdo do jogo e substituirá as contagens máximas se for possível saber com certeza a quantidade exata:

  • Se uma coleção não contiver nenhum componente de fábrica, a quantidade exata de cada componente e objeto de jogo será alocada, e os valores de contagem máxima serão ignorados.
  • Se uma coleção contiver um componente de fábrica, os objetos gerados serão analisados e a contagem máxima será usada para componentes que podem ser gerados pelas fábricas e para objetos de jogo.
  • Se uma coleção contiver uma fábrica ou uma fábrica de coleção com a opção “Dynamic Prototype” ativada, essa coleção usará os contadores máximos.