初始化位图时如何解决 stringIndexOutofBoundsException
how to resolve stringIndexOutofBoundsException when bitmap is initialized
我正在学习使用 libgdix.I 学习 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.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
你真正的问题是找不到字体文件...
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Error loading font file: images/arial-15.fnt
确保文件位于正确的位置,这可能是 android/assets/images
,但取决于您的项目设置。
还要确保您的 运行 桌面版本 android/assets 作为工作文件夹。
您遇到的例外情况是 this one。实际上是说加载文件时出了点问题。内部异常显示加载时出了什么问题:
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)
因为最近没有调用 String#substring at line 476, this is an indication that you're using an older version of libgdx (which is to be expected, because a lot has changed to that file)。所以我建议您每晚更新到最新版本(或检查您正在使用的版本时的 github 历史记录),这样您就知道实际上是哪个调用导致了错误。
无论哪种方式,加载文件时子字符串调用失败的事实都很好地表明文件可能已损坏或以另一种方式不符合预期格式。假设您想使用 libgdx 测试使用的字体,那么您可以下载正确的版本 here and the required image here。确保将图像放在与 fnt 文件相同的文件夹中。
我正在学习使用 libgdix.I 学习 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.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
你真正的问题是找不到字体文件...
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Error loading font file: images/arial-15.fnt
确保文件位于正确的位置,这可能是 android/assets/images
,但取决于您的项目设置。
还要确保您的 运行 桌面版本 android/assets 作为工作文件夹。
您遇到的例外情况是 this one。实际上是说加载文件时出了点问题。内部异常显示加载时出了什么问题:
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)
因为最近没有调用 String#substring at line 476, this is an indication that you're using an older version of libgdx (which is to be expected, because a lot has changed to that file)。所以我建议您每晚更新到最新版本(或检查您正在使用的版本时的 github 历史记录),这样您就知道实际上是哪个调用导致了错误。
无论哪种方式,加载文件时子字符串调用失败的事实都很好地表明文件可能已损坏或以另一种方式不符合预期格式。假设您想使用 libgdx 测试使用的字体,那么您可以下载正确的版本 here and the required image here。确保将图像放在与 fnt 文件相同的文件夹中。