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
Fontes são usadas para renderizar texto em componentes Label e nodes GUI de texto. O Defold oferece suporte a vários formatos de arquivo de fonte:
Fontes adicionadas ao seu projeto são convertidas automaticamente para um formato de textura que o Defold consegue renderizar. Há duas técnicas de renderização de fontes disponíveis, cada uma com seus próprios benefícios e desvantagens:
Por padrão, a conversão para imagens de glifos rasterizadas acontece no momento do build (offline). A desvantagem é que cada fonte precisa rasterizar todos os glifos possíveis na etapa de build, produzindo texturas potencialmente muito grandes, que consomem memória e também aumentam o tamanho do pacote.
Ao usar “fontes em runtime”, as fontes .ttf serão empacotadas como estão, e a rasterização acontecerá sob demanda em tempo de execução. Isso minimiza tanto o uso de memória em runtime quanto o tamanho do pacote.
As fontes em runtime também têm o benefício de oferecer suporte completo a layout de texto, por exemplo, da direita para a esquerda. Atualmente usamos as bibliotecas HarfBuzz, SheenBidi, libunibreak e SkriBidi.
Veja Habilitando fontes em runtime
O formato de arquivo .fontc também é conhecido como coleção de fontes. No modo offline, apenas uma fonte é associada a ele.
Ao usar fontes em runtime, você pode associar mais de um arquivo de fonte (.ttf) à coleção de fontes.
Isso permite usar uma coleção de fontes ao renderizar vários textos em idiomas diferentes, mantendo baixo o uso de memória. Por exemplo, carregar uma coleção com a fonte japonesa, então associar essa fonte à fonte principal atual, seguido pelo descarregamento da coleção de fontes japonesas.
Para criar uma fonte para uso no Defold, crie um novo arquivo Font selecionando File ▸ New... no menu e, em seguida, selecione Font. Você também pode clicar com o botão direito em um local no navegador Assets e selecionar New... ▸ Font.

Dê um nome ao novo arquivo de fonte e clique em Ok. O novo arquivo de fonte agora abre no editor.

Arraste a fonte que deseja usar para o navegador Assets e solte-a em um local adequado.
Defina a propriedade Font para o arquivo de fonte e ajuste as propriedades da fonte conforme necessário.
.fnt a usar para gerar os dados da fonte.TYPE_BITMAP converte o arquivo OTF ou TTF importado em uma textura de folha de fonte, na qual os dados bitmap são usados para renderizar nodes de texto. Os canais de cor são usados para codificar a forma da face, o contorno e a sombra projetada. Para arquivos .fnt, o bitmap da textura de origem é usado como está.TYPE_DISTANCE_FIELD A fonte importada é convertida em uma textura de folha de fonte, em que os dados de pixel não representam pixels da tela, mas distâncias até a borda da fonte. Veja os detalhes abaixo.MODE_SINGLE_LAYER produz um único quad para cada caractere.MODE_MULTI_LAYER produz quads separados para a forma do glifo, o contorno e as sombras, respectivamente. As camadas são renderizadas de trás para frente, o que impede que um caractere oculte caracteres renderizados anteriormente se o contorno for mais largo que a distância entre glifos. Esse modo de renderização também habilita o deslocamento adequado de sombra projetada, conforme especificado pelas propriedades Shadow X/Y no recurso de fonte.O suporte a sombra é habilitado pelos shaders de material de fonte integrados e lida tanto com o modo de renderização de camada única quanto com o de múltiplas camadas. Se você não precisa de renderização de fonte em camadas ou suporte a sombra, é melhor usar um shader mais simples, como builtins/font-singlelayer.fp.
MODE_MULTI_LAYER.Para fontes em runtime, esse texto funciona como um pré-aquecimento de cache com os glifos corretos. Isso acontece durante o tempo de carregamento. Veja font.prewarm_text().
Os caracteres ASCII imprimíveis são: space ! “ # $ % & ‘ ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
ERROR:RENDER: Out of available cache cells! Consider increasing cache_width or cache_height for the font.).
Se definido como 0, o tamanho do cache é definido automaticamente e crescerá até no máximo 2048x4096.
Fontes de campo de distância armazenam a distância até a borda do glifo na textura, em vez de dados bitmap. Quando a engine renderiza a fonte, um shader especial é necessário para interpretar os dados de distância e usá-los para desenhar o glifo. Fontes de campo de distância exigem mais recursos do que fontes bitmap, mas permitem maior flexibilidade de tamanho.

Certifique-se de alterar a propriedade Material da fonte para builtins/fonts/font-df.material (ou qualquer outro material que consiga lidar com os dados de campo de distância) ao criar a fonte; caso contrário, a fonte não usará o shader correto ao ser renderizada na tela.
Além de bitmaps gerados, o Defold oferece suporte a fontes bitmap pré-geradas no formato “BMFont”. Essas fontes consistem em uma folha de fonte PNG com todos os glifos. Além disso, um arquivo .fnt contém informações sobre onde cada glifo pode ser encontrado na folha, bem como informações de tamanho e kerning. (Observe que o Defold não oferece suporte à versão XML do formato .fnt usada pelo Phaser e algumas outras ferramentas.)
Esses tipos de fonte não oferecem melhoria de desempenho em relação a fontes bitmap geradas a partir de arquivos TrueType ou OpenType, mas podem incluir gráficos arbitrários, cores e sombras diretamente na imagem.
Adicione os arquivos .fnt e .png gerados ao seu projeto Defold. Esses arquivos devem ficar na mesma pasta. Crie um novo arquivo de fonte e defina a propriedade font para o arquivo .fnt. Certifique-se de que output_format esteja definido como TYPE_BITMAP. O Defold não gerará um bitmap, mas usará o fornecido no PNG.
Para criar uma BMFont, você precisa usar uma ferramenta capaz de gerar os arquivos apropriados. Existem várias opções:

Para que a fonte renderize corretamente, não se esqueça de definir a propriedade material como builtins/fonts/font-fnt.material ao criar a fonte.
Em geral, fontes bitmap são melhores quando a fonte é renderizada sem escala. Elas são mais rápidas para renderizar na tela do que fontes de campo de distância.
Fontes de campo de distância respondem muito bem ao aumento de escala. Fontes bitmap, por outro lado, por serem apenas imagens pixeladas, aumentam de tamanho fazendo os pixels crescerem conforme a fonte é escalada, resultando em artefatos blocados. A seguir há um exemplo com tamanho de fonte de 48 pixels, ampliado 4 vezes.

Ao reduzir a escala, texturas bitmap podem ser reduzidas com boa qualidade e eficiência, com antialiasing feito pela GPU. Uma fonte bitmap preserva melhor sua cor do que uma fonte de campo de distância. Aqui está um zoom da mesma fonte de exemplo com tamanho de 48 pixels, reduzida para 1/5 do tamanho:

Fontes de campo de distância precisam ser renderizadas para um tamanho-alvo grande o suficiente para conter informações de distância capazes de expressar as curvas dos glifos da fonte. Esta é a mesma fonte acima, mas com tamanho de 18 pixels e ampliada 10 vezes. Fica claro que isso é pequeno demais para codificar as formas desta tipografia:

Se você não quiser suporte a sombra ou contorno, defina seus respectivos valores alpha como zero. Caso contrário, dados de sombra e contorno ainda serão gerados, ocupando memória desnecessária.
Um recurso de fonte no Defold resulta em duas coisas em tempo de execução: uma textura e os dados da fonte.
Em tempo de execução, ao renderizar texto, a engine primeiro percorre os glifos a serem renderizados para verificar quais estão disponíveis no cache de textura. Cada glifo ausente do cache de textura de glifos disparará um upload de textura a partir dos dados bitmap armazenados nos dados da fonte.
Cada glifo é colocado internamente no cache de acordo com a linha de base da fonte, o que permite calcular coordenadas locais de textura do glifo dentro de sua célula de cache correspondente em um shader. Isso significa que você pode obter certos efeitos de texto, como gradientes ou sobreposições de textura, dinamicamente. A engine expõe métricas sobre o cache ao shader por meio de uma constante especial de shader chamada texture_size_recip, que contém as seguintes informações nos componentes do vetor:
texture_size_recip.x é o inverso da largura do cachetexture_size_recip.y é o inverso da altura do cachetexture_size_recip.z é a razão entre a largura da célula de cache e a largura do cachetexture_size_recip.w é a razão entre a altura da célula de cache e a altura do cachePor exemplo, para gerar um gradiente em um fragment shader, basta escrever:
float horizontal_gradient = fract(var_texcoord0.y / texture_size_recip.w);
Para mais informações sobre uniforms de shader, consulte o manual de shader.
É possível usar geração em runtime para fontes do tipo SDF ao usar fontes TrueType (.ttf). Essa abordagem pode reduzir bastante o tamanho do download e o consumo de memória em runtime de um jogo Defold. A pequena desvantagem é a natureza assíncrona da geração de cada glifo.
Habilite o recurso definindo font.runtime_generation em game.project.
Adicione um App Manifest e habilite a opção Use full text layout system.
Isso compila uma engine personalizada com esse recurso habilitado.
Este recurso está atualmente experimental, mas com a intenção de ser usado como o fluxo de trabalho padrão no futuro.
A configuração font.runtime_generation afeta todas as fontes .ttf do projeto.
Para tornar fontes em runtime mais fáceis de usar, elas dão suporte ao pré-aquecimento do cache de glifos. Isso significa que a fonte gerará os glifos listados em Characters na fonte.
Se All Chars estiver selecionado, não haverá pré-aquecimento, pois isso anula o propósito de não precisar gerar todos os glifos ao mesmo tempo.
Se o campo Characters do arquivo .fontc estiver definido, ele é usado como texto para descobrir quais glifos precisam ser atualizados no cache de glifos.
Também é possível atualizar manualmente o cache de glifos chamando font.prewarm_text(font_collection, text, callback). Ela fornece um callback para informar quando todos os glifos ausentes foram adicionados ao cache de glifos e é seguro apresentar o texto na tela.
Para fontes em runtime, é possível adicionar ou remover fontes (.ttf) de uma coleção de fontes. Isso é útil quando uma fonte grande foi dividida em vários arquivos para diferentes conjuntos de caracteres (por exemplo, CJK).
Adicionar uma fonte a uma coleção de fontes não carrega nem renderiza automaticamente todos os glifos.
-- obtém a fonte principal
local font_collection = go.get("#label", "font")
font.add_font(font_collection, self.language_ttf_hash)
-- obtém a fonte do idioma selecionado
local font_collection_language = go.get("localization_japanese#label", "font")
local font_info = font.get_info(font_collection_language)
self.language_ttf_hash = font_info.fonts[1].path_hash -- obtém a primeira fonte (a especificada no editor)
font.add_font(self.font_collection, self.language_ttf_hash) -- aumenta a contagem de referência da fonte
-- remove a referência da fonte
font.add_font(self.font_collection, self.language_ttf_hash)
Para mostrar corretamente um texto com uma fonte em runtime, os glifos precisam ser resolvidos. font.prewarm_text() faz isso para você.
É uma operação assíncrona e, quando termina e você recebe o callback, é seguro avançar para mostrar qualquer mensagem que contenha os glifos.
Se o cache de glifos ficar cheio, o glifo mais antigo no cache será removido.
font.prewarm_text(self.font_collection, info.text, function (self, request_id, result, err)
if result then
print("PREWARMING OK!")
label.set_text(self.label, info.text)
else
print("Error prewarming text:", err)
end
end)