有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 2 楼答案

    听起来您应该使用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

    您需要提供一个字体文件