Ao executar ou depurar meu jogo no dispositivo Android, recebo este erro no logcat:
com.badlogic.gdx.utils.GdxRuntimeException: Erro ao ler o arquivo: data / fonts / myFont.ttf (interno)
Que é criado por esta linha de código:
FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);
onde fontFile
é definido assim:
FileHandle fontFile = Gdx.files.internal("data/fonts/myFont.ttf");
Isso não acontece quando executo a configuração da área de trabalho.
Eu sei que para a configuração da área de trabalho, você precisa definir o diretório de trabalho do seu projeto, mas não vejo essa opção na configuração do Android e isso também não faz sentido; portanto, não acho que seja um problema relacionado ao "diretório de trabalho" .
Obviamente, o arquivo está no caminho correto.
Observe também que tudo funcionou bem no meu projeto anterior. Eu criei esse novo projeto criando um novo prj em branco usando libgdx-setup e copiando todas as classes e pacotes do projeto mais antigo. Talvez seja um problema relacionado a algum arquivo Gradle?
FileNotFoundException
? Arquivo-sistema Android é sensível a maiúsculas, certifique-se que você escreveu corretamente "myfont.ttf" é diferente que "myfont.ttf"Respostas:
Se o sistema de arquivos da área de trabalho de teste estiver em execução no Windows NTFS e o sistema de arquivos do dispositivo Android estiver no Android, a diferença estará nos drivers do sistema de arquivos.
Os drivers do sistema de arquivos do Windows não diferenciam maiúsculas de minúsculas, mas o Android usa Linux, que diferencia maiúsculas de minúsculas.
Verifique se sua capitalização está correta no arquivo.
Além disso, notei que você estava usando um caminho absoluto sem variável ambiental. Isso é dinâmico no seu diretório de trabalho atual no Android. Portanto, se o aplicativo for executado em um diretório diferente, ele procurará em um local diferente o arquivo. Isso pode causar problemas entre várias revisões do sistema. Sempre forneça caminhos absolutos no Android. Isso significa começar com uma variável de ambiente ou o diretório raiz (ou seja, "/"). Para poder mover o aplicativo para um cartão SD, é melhor usar as variáveis de ambiente.
Além disso, você não deve usar o diretório de dados dinâmicos para sua fonte. Você deve agrupá-lo no pacote do seu aplicativo.
fonte
Acredito que para o Android você precisa ter uma pasta de ativos com todos os ativos carregados nela, essa pasta de ativos estaria no projeto android em vez do projeto principal. Desktop, HTML, etc, todos usam os principais recursos do projeto para que funcionem bem, mas o Android precisa de sua própria pasta de ativos. você tem um para isso?
fonte
As opções são:
1) Tente TTF maiúsculo em vez de ttf em todo o seu código - caso o arquivo original tenha sufixo TTF, porque o Android diferencia maiúsculas de minúsculas.
2) No arquivo build.gradle no seu módulo Android, verifique se:
E não:
Em outras palavras, verifique se é sua pasta de ativos do Android. este funcionou para mim. limpe o projeto de compilação e desinstale o aplicativo antigo do dispositivo Android.
fonte
Tente copiar os arquivos de fonte diretamente na pasta de ativos.
fonte
Basta fazer uma coisa que você pode alterar o método que você está seguindo agora. você pode usar a ferramenta "hiero" para a criação da fonte. Basta baixar o arquivo jar "hiero" no link a seguir
https://libgdx.badlogicgames.com/tools.html
usando hiero, você poderá acessar quase todas as fontes. Depois de criar as fontes, salve-o na pasta "asset" dos arquivos de projeto do Android e adicione o código a seguir.
apenas tente este método. vai funcionar.
fonte
FreeTypeFontGenerator
vamos importar qualquer fonte e escrever com ela em qualquer tamanho. Onde o Hiero exige que você gere bitmaps para cada fonte e tamanho. Concordo que o hiero é uma ótima ferramenta, mas isso não está respondendo à pergunta.Verifique se os arquivos estão dentro de / android / assets.
fonte