在尝试将TTF文件加载到我的游戏中时,读取字体数据时出错



使用我创建的fontLoader类(下面的代码(加载字体时,我收到一个错误:java.io.IOException:读取字体数据时出现问题。

这是我正在开发的2D游戏。我试过其他加载字体的方法,但都没用。

这是我的Font类,带有loadFont方法。


package dev.java2dgame.gfx;
import java.awt.Font;
import java.awt.FontFormatException;
import java.io.IOException;
import java.io.File;
public class Fonts {
public static Font loadFont(String path, float size){
try {
return Font.createFont(Font.TRUETYPE_FONT, Font.class.getClass().getResourceAsStream(path)).deriveFont(Font.PLAIN, size);
} catch (FontFormatException | IOException e) {
e.printStackTrace();
System.exit(1);
}
return null;
}
}

这是我调用loadFont((方法的地方,也是我输入的路径。它在我的Assets类中加载并保存我所有的游戏资产。我知道字体文件的路径是正确的,因为我确保可以从字体文件夹加载其他图像和内容作为测试。我还检查了10次,以确保我写的名字正确。

public class Assets {
public static final int width = 64, height = 64;
public static BufferedImage nothing, floor, aud_floor, gym_floor,
front_wall, left_wall, right_wall, shelf_wall, whiteboard_wall, closed_window,
storm_window, bookshelf1, bookshelf2;
public static Font font36;
public static BufferedImage saw;
public static SpriteSheet tileSheet;
public static void init() {
font36 = Fonts.loadFont("/fonts/munro.ttf", 16);
tileSheet = new SpriteSheet("/sprites/tilesheet.png");
saw = ImageLoader.loadImage("/sprites/singlesprites/woodshop_saw.png");
nothing = tileSheet.crop(width, height, width, height);

这个类的其余部分被切断,因为不需要其中的信息。

这就是我运行代码时遇到的错误。

java.io.IOException: Problem reading font data.
at java.desktop/java.awt.Font.createFont0(Font.java:1183)
at java.desktop/java.awt.Font.createFont(Font.java:1052)
at dev.java2dgame.gfx.Fonts.loadFont(Fonts.java:12)
at dev.java2dgame.gfx.Assets.init(Assets.java:21)
at dev.java2dgame.main.Game.init(Game.java:54)
at dev.java2dgame.main.Game.run(Game.java:93)
at java.base/java.lang.Thread.run(Thread.java:835)

我用这段代码解决了这个问题!

public static Font loadFont(String path, float size){   
try {
InputStream fileStream = Fonts.class.getResourceAsStream(path);
Font myFont = Font.createFont(Font.TRUETYPE_FONT, fileStream);
return myFont.deriveFont(Font.PLAIN, size);
} catch (FontFormatException | IOException e) {
e.printStackTrace();
System.exit(1);
}
return null;
}

最新更新