为什么在运行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 2015年

是的,我没有在logcat中阅读它,这是logcat消息的另一部分:由以下原因引起:java.io.FileNotFoundException:android.content.res.AssetManager.openAsset(Native中的data / fonts / myFont.ttf com.badlogic.gdx.backends.android.AndroidFileHandle.read(AndroidFileHandle.java:75)上android.content.res.AssetManager.open(AssetManager.java:359)的方法我确定文件是正确的,它在里面资产/数据/字体/myFont.ttf我认为由于某些原因,Android不在正确的文件夹中...但是运行桌面配置的效果很好
Davide Cattani 2015年

也许最好联系Android技术支持?
Wow_mentor

Answers:


1

如果您的测试桌面文件系统在Windows NTFS上运行,而Android设备文件系统在Android本机上,则区别在于文件系统驱动程序。

Windows文件系统驱动程序不区分大小写,但Android使用区分大小写的Linux。

确保文件上的大写正确。

另外,我注意到您使用的是没有环境变量的绝对路径。这对于您当前在Android上的工作目录是动态的。因此,如果该应用程序从其他目录运行,它将在文件的其他位置查找。这可能会导致各种系统修订版之间出现问题。始终在Android中提供绝对路径。这意味着从环境变量或根目录(即“ /”)开始,为了能够将应用程序移动到SD卡,最好使用环境变量。

此外,您不应该为字体使用动态数据目录。您应该将其捆绑到应用程序的软件包中。


0

我相信对于android,您需要拥有一个Assets文件夹,并将所有资产加载到其中,该asset文件夹将位于android项目而不是核心项目中。桌面,HTML等都使用核心项目资产,因此它们可以正常工作,但是android需要自己的资产文件夹。你有一个吗?


2
桌面HTML和核心使用Android资产文件夹,这是项目中唯一的资产文件夹。
Davide Cattani

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"));

只需尝试此方法。它会工作。


抱歉,必须对此投票。使用FreeTypeFontGeneratorlet,您可以导入任何字体并以任何大小书写。Hiero要求您为每种字体和大小生成位图。我同意hiero是一个很棒的工具,但这不能回答问题。
Madmenyo

@Madmenyo嗨,我只是提供一种替代方法来解决他的问题。上面的概念没有错。这是他的问题的替代解决方案。我不知道拒绝投票的确切原因是什么。
Gokul Sreenivasan

你怎么知道的?也许他需要大量动态生成的文本,但是hiero对此无济于事。
Madmenyo

@Madmenyo嗨,您可以先阅读他的问题。我提供了一个替代解决方案。
Gokul Sreenivasan

他想加载ttf,建议您创建一个位图字体。
Madmenyo

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.