0

我正在尝试嵌入 TTF 字体,然后将其与 Grapics2D 一起使用。我已经能够创建字体,但我不确定如何将字体传递给 setFont。我在这里制作了一个新字体,它不会抛出任何异常:

private Font pixel = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream("font/amora.ttf"));

但我不知道如何用 setFont();

这是我的代码:

private static final long serialVersionUID = 1L;
private Timer timer;
private Char Char;
private Font pixel = Font.createFont(Font.TRUETYPE_FONT, this.getClass().getResourceAsStream("font/amora.ttf")); <<<--------

public Board() throws FontFormatException, IOException {

    addKeyListener(new TAdapter());
    setFocusable(true);
    setBackground(Color.BLACK);
    setDoubleBuffered(true);

    Char = new Char();

    timer = new Timer(5, this);
    timer.start();
}


public void paint(Graphics g) {
    super.paint(g);

    Graphics2D g2d = (Graphics2D)g;
    g2d.drawImage(Char.getImage(), Char.getX(), Char.getY(), this);
    g.setColor(Color.white);
    g.setFont( What goes here? );  // <------------
    g.drawString("Amora Engine rev25 (acetech09)", 10, 20);
    g.drawString(Char.getDebugStats(0), 10, 40);
    g.drawString(Char.getDebugStats(1), 10, 60);
    Toolkit.getDefaultToolkit().sync();
    g.dispose();
}


public void actionPerformed(ActionEvent e) {
    Char.move();
    repaint();  
}
}

任何帮助将不胜感激。谢谢。

4

2 回答 2

0

你可以做...

g.setFont(pixel);

但是您可能会获得更好的成功

g.setFont(pixel.deriveFont(Font.BOLD, 36f));

是……的变体吗?

另外,不要处理Graphics您没有创建的上下文......

Graphics2D g2d = (Graphics2D)g;
/*...*/
// g.dispose();

或者

Graphics2D g2d = (Graphics2D)g.create();
/*...*/
g.dispose();

我也不愿意覆盖该paint方法。假设您使用类似JComponentor的东西JPanel,您应该使用paintComponent. 如果您直接渲染顶级容器(如JFrame),那么我不会。双缓冲和框架边框的问题不会让你的生活变得有趣......

我也担心new Timer(5, this)- 5 毫秒足够接近 0,几乎没有什么区别。你最好使用类似的东西40,它应该给你类似 25fps 的东西,或者17会给你大约 60fps 的东西......

于 2013-08-27T06:08:35.543 回答
0

它应该是

g.setFont( this.pixel );

如果这不起作用,请尝试:

  1. 注释掉setFont指令。
  2. 替换Font.createFont为对 Java 标准字体的引用。

排除可能的问题。

于 2013-08-27T06:10:49.433 回答