2013-02-17 89 views

回答

0

听起来你应该使用Slick2d的UnicodeFont类。

随着UnicodeFont,你可以很容易地在屏幕上绘制不同颜色的文字。

初始化:

UnicodeFont uf = null; 
try { 
    uf = new UnicodeFont("path/to/font", <size>, <bold>, <italic>); 
    uf.getEffects().add(new ColorEffect(java.awt.Color.white)); // set the default color to white 
    uf.addAsciiGlyphs(); 
    uf.loadGlyphs(); // load glyphs from font file 
} catch (SlickException exception) { 
    exception.printStackTrace(); 
} 

绘制文本到屏幕上:

uf.drawString(<x>, <y>, <text>); 

一定要将此代码添加到您的OpenGL初始化:

glEnable(GL_BLEND); 
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

这确保了此将不会发生:

oh no!

此外,如果启用GL_DEPTH_TEST,也会发生类似的问题。要解决此问题,请在屏幕上绘制文本时禁用GL_DEPTH_TEST

全部工作的字体绘图程序:

import static org.lwjgl.opengl.GL11.*; 

import org.lwjgl.LWJGLException; 
import org.lwjgl.opengl.Display; 
import org.lwjgl.opengl.DisplayMode; 
import org.newdawn.slick.SlickException; 
import org.newdawn.slick.UnicodeFont; 
import org.newdawn.slick.font.effects.ColorEffect; 

public class TextDrawing { 
    static UnicodeFont uf = null; 


    public static void initGL() { 
     glMatrixMode(GL_PROJECTION); 
     glLoadIdentity(); 
     glOrtho(0, 640, 480, 0, 1, -1); 
     glMatrixMode(GL_MODELVIEW); 

     glEnable(GL_TEXTURE_2D); 
     glEnable(GL_BLEND); 
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 
    } 

    @SuppressWarnings("unchecked") 
    public static void initFont(int size, boolean bold, boolean italic) { 
     try { 
      uf = new UnicodeFont("path/to/font.ttf", size, bold, italic); 
      uf.addAsciiGlyphs(); 
      uf.getEffects().add(new ColorEffect(java.awt.Color.white)); 
      uf.loadGlyphs(); 
     } catch (SlickException e) { 

     } 
    } 
    public static void main(String[] args) { 
     try { 
      Display.setDisplayMode(new DisplayMode(640, 480)); 
      Display.setTitle("Text Drawing!"); 
      Display.setResizable(false); 
      Display.create(); 
     } catch (LWJGLException e) { 

     } 

     initGL(); 
     initFont(100, false, false); 

     while (!Display.isCloseRequested()) { 

      glClear(GL_COLOR_BUFFER_BIT); 

      uf.drawString(10, 10, "Sweet Text"); 

      Display.update(); 
      Display.sync(60); 
     } 

     System.exit(0); 

    } 
} 

这将产生:

sweet text

您需要提供一个字体文件。