我正在尝试嵌入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();
}
}
非常感谢任何帮助。感谢。
答案 0 :(得分: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
方法。假设您使用JComponent
或JPanel
之类的内容,则应使用paintComponent
。如果你直接渲染一个顶级容器(如JFrame
),那我就不会。双缓冲和框架边框存在问题,这些问题不会让您的生活充满乐趣......
我也关注new Timer(5, this)
- 5毫秒足够接近0,差别不大。你会更喜欢像40
这样的东西,它可以给你25fps或17
这样的东西,它会给你大约60fps ......
答案 1 :(得分:0)
应该是
g.setFont( this.pixel );
如果这不起作用,请尝试:
setFont
指令。Font.createFont
。排除可能的问题。