Android構成の実行中に.ttfファイルを読み取れないのはなぜですか?


9

Androidデバイスでゲームを実行またはデバッグすると、logcatに次のエラーが表示されます。

com.badlogic.gdx.utils.GdxRuntimeException:ファイルの読み取りエラー:data / fonts / myFont.ttf(内部)

これは次のコード行によって作成されます。

FreeTypeFontGenerator generator = new FreeTypeFontGenerator(fontFile);

どこfontFileのように定義されています。

FileHandle fontFile = Gdx.files.internal("data/fonts/myFont.ttf");

デスクトップ構成を実行しても、これは起こりません。

デスクトップ構成の場合、プロジェクトの作業ディレクトリを定義する必要があることはわかっていますが、Android構成にはそのようなオプションが表示されず、それも意味がないため、「作業ディレクトリ」に関連する問題ではないと思います。

明らかに、ファイルは正しいパスにあります。

また、私の以前のプロジェクトではすべてが正常に機能したことにも注意してください。libgdx-setupを使用して新しい空のprjを作成し、古いプロジェクトからすべてのクラスとパッケージをコピーして、この新しいプロジェクトを作成しました。おそらくそれはいくつかのGradleファイルに関連した問題ですか?


1
取得していFileNotFoundExceptionますか?Androidファイルシステムでは大文字と小文字が区別されます。「myFont.ttf」が「myFont.TTF」とは異なるため、正しく記述したことを確認してください
Alex Sifuentes

はい、私はlogcatでそれを読みませんでした、これはlogcatメッセージの他の部分です:原因:java.io.FileNotFoundException:data / fonts / myFont.ttf at android.content.res.AssetManager.openAsset(Nativeメソッド)at android.content.res.AssetManager.open(AssetManager.java:359)at com.badlogic.gdx.backends.android.AndroidFileHandle.read(AndroidFileHandle.java:75)私はファイルが正しいと確信しています、それは中にありますassets / data / fonts / myFont.ttfなんらかの理由でAndroidが正しいフォルダーを検索していないと思います...しかし、デスクトップ構成の実行は正常に機能します
Davide Cattani

おそらくAndroidテクニカルサポートに連絡する方が良いでしょうか?
Wow_mentor

回答:


1

テストデスクトップファイルシステムがWindows NTFS上で実行され、AndroidデバイスファイルシステムがAndroidネイティブ上にある場合、違いはファイルシステムドライバーにあります。

Windowsファイルシステムドライバは大文字と小文字を区別しませんが、Androidは大文字と小文字を区別するLinuxを使用します。

ファイルの大文字が正しいことを確認してください。

さらに、環境変数のない絶対パスを使用していることに気付きました。これは、Androidの現在の作業ディレクトリに対して動的です。したがって、アプリを別のディレクトリから実行すると、別の場所でファイルが検索されます。これにより、さまざまなシステムリビジョン間で問題が発生する可能性があります。Androidでは常に絶対パスを指定してください。これは、環境変数またはルートディレクトリ(つまり「/」)から開始することを意味します。アプリをSDカードに移動できるようにするには、環境変数を使用することをお勧めします。

さらに、フォントに動的データディレクトリを使用しないでください。アプリのパッケージにバンドルする必要があります。


0

私はアンドロイドの場合、すべてのアセットがロードされたアセットフォルダが必要であると信じています。このアセットフォルダはコアプロジェクトではなくアンドロイドプロジェクトにあります。デスクトップ、HTMLなどはすべてコアプロジェクトアセットを使用するため、正常に機能しますが、androidには独自のアセットフォルダーが必要です。あなたはそれを持っていますか?


2
デスクトップHTMLとコアはAndroidアセットフォルダーを使用します。これは、プロジェクトの唯一のアセットフォルダーです。
Davide Cattani 2015

0

オプションは次のとおりです。

1)すべてのコードでttfの代わりにTTF大文字を試してください-元のファイルにTTFサフィックスが付いている場合、androidでは大文字と小文字が区別されるためです。

2)Androidモジュールの下のbuild.gradleファイルで、次のことを確認します。

assets.srcDirs = ['assets']

そしてない:

assets.srcDirs = ['assetManager']

つまり、Androidアセットフォルダーを確認します。これは私のために働いた。その後、ビルドプロジェクトをクリーンアップし、Androidデバイスから古いアプリをアンインストールします。


[DMGregory]取得しました。回答を編集しました。
Yan.F

-1

フォントファイルを直接アセットフォルダにコピーしてみてください。


-1

あなたが今あなたがフォローしている方法を変えることができる一つのことをしてください。フォント作成には「hiero」ツールを使用できます。次のリンクから「hiero」jarファイルをダウンロードするだけです

https://libgdx.badlogicgames.com/tools.html

hieroを使用すると、ほとんどすべてのフォントにアクセスできます。フォントを作成したら、それをAndroidプロジェクトファイルの「asset」フォルダーに保存し、次のコードを追加します。

     private BitmapFont font;
     font = new BitmapFont(Gdx.files.internal("myNewFontCreatedByHiero.fnt"));

この方法を試してください。それが動作します。


申し訳ありませんが、これに反対票を投じる必要があります。Letを使用して、FreeTypeFontGenerator任意のフォントをインポートし、それを任意のサイズで書き込みます。Hieroでは、フォントとサイズごとにビットマップを生成する必要があります。hieroは素晴らしいツールであることに同意しますが、これは質問に対する答えではありません。
Madmenyo 2017年

@Madmenyoこんにちは、私は彼の問題を解決する別の方法を提供します。上記の概念は間違っていません。これは彼の問題の代替ソリューションです。反対票を投じる正確な理由は何なのかわかりません。
Gokul Sreenivasan 2017

どうして知っていますか?多分彼は多くの動的に生成されたテキストを必要とします、hieroはそれを助けません。
Madmenyo 2017年

@Madmenyoこんにちは、あなたは彼の質問を最初に読むかもしれません。私は代替の解決策を与えました。
Gokul Sreenivasan 2017

彼は、ビットマップフォントの作成を提案するttfをロードしたいと考えています。
Madmenyo 2017年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.