2013-08-27 2 views
0

Я пытаюсь вставить шрифт TTF, а затем использовать рисовать его с помощью Grapics2D. Я смог создать шрифт, но я не совсем уверен, как передать шрифт в setFont. Я делаю новый шрифт здесь, который не бросает никаких исключений:Встраивание TTF и использование с g2d

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

'g.setFont (/ * Что здесь происходит? * /);' ... 'pixel'? – MadProgrammer

+0

Один из пиксельных методов, похоже. Я просто не могу понять их. – user2720349

+0

На самом деле, только пиксель действительно работает ... но он делает шрифт ровно в 1 пиксель, поэтому я не видел его пока только сейчас. Я предполагаю, что один из этих методов дает ему правильный размер. – user2720349

ответ

0

Вы можете просто сделать ...

g.setFont(pixel); 

Но вы могли бы лучше с успеха на

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

ли вариации ....

Кроме того, не выбрасывайте a 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, который даст вам примерно 60 кадров в секунду ...

0

Это должно быть

g.setFont(this.pixel); 

Если это не работает, попробуйте :

  1. Комментарий к инструкции setFont.
  2. Замена Font.createFont со ссылкой на стандартный шрифт Java.

, чтобы исключить возможные проблемы.

Смежные вопросы