初始化位图时如何解决stringIndexOutofBoundsException

时间:2015-06-22 12:46:14

标签: libgdx

我正在学习使用libgdix开发游戏。我按照学习LibGDX游戏开发,第二版一书。 我对使用Bitmapfont感到困惑。

public class AssetsFonts
{
    public final BitmapFont defaultSmall;
    public final BitmapFont defaultNormal;
    public final BitmapFont defaultBig;
    public AssetsFonts()
{
        defaultSmall = new BitmapFont(Gdx.files.internal("images/arial-15.fnt"),true);
        defaultNormal = new BitmapFont(Gdx.files.internal("images/arial-15.fnt"),true);
        defaultBig = new BitmapFont(Gdx.files.internal("images/arial-15.fnt"),true);
        defaultSmall.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
        defaultNormal.getRegion().getTexture().setFilter(TextureFilter.Linear, TextureFilter.Linear);
        defaultBig.getRegion().getTexture().setFilter(TextureFilter.Linear,TextureFilter.Linear);
    }
}

当我运行时遇到以下错误

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Error loading font file: images/arial-15.fnt
at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.load(BitmapFont.java:650)
at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.<init>(BitmapFont.java:465)
at com.badlogic.gdx.graphics.g2d.BitmapFont.<init>(BitmapFont.java:115)
at com.packtpub.libgdx.canyonbunny.game.Assets$AssetsFonts.<init>(Assets.java:125)
at com.packtpub.libgdx.canyonbunny.game.Assets.init(Assets.java:49)
at com.packtpub.libgdx.canyonbunny.CanyonBunnyMain.create(CanyonBunnyMain.java:22)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:143)
at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:120)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -7
at java.lang.String.substring(String.java:1918)
at com.badlogic.gdx.graphics.g2d.BitmapFont$BitmapFontData.load(BitmapFont.java:476)
... 7 more

2 个答案:

答案 0 :(得分:1)

你真正的问题是找不到字体文件......

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Error loading font file: images/arial-15.fnt

确保文件位于正确的位置,可能是android/assets/images,但取决于您的项目设置。

还要确保以android / assets作为工作文件夹运行桌面版。

答案 1 :(得分:1)

您获得的例外是this one。实际上说加载文件时出错了。内部异常显示加载时出错:

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
eapol_version=2
ap_scan=0
  network={
      ssid="YOUR-SSID"
      key_mgmt=IEEE8021X
      eap=PEAP
      identity="test"
      password="password"
      ca_cert="/etc/certs/cacert.pem"
      phase2="autheap=TLS"
      ca_cert2="/etc/certs/cacert.pem"
      private_key2="/etc/certs/test.pfx"
      private_key2_passwd="password"
      }

由于没有调用String #substring at line 476,这表明您正在使用旧版本的libgdx(这是预期的,因为a lot has changed to that file最近)。所以我建议您每晚更新一次(或者在您正在使用的版本时查看github历史记录),这样您就知道哪个电话实际上导致了错误。

无论哪种方式,在加载文件时子字符串调用失败的事实很好地表明该文件可能已损坏或以其他方式不符合预期的格式。假设您要使用libgdx测试使用的字体,那么您可以下载正确的版本here和所需的图像here。确保将图像放在与fnt文件相同的文件夹中。