gpt4 book ai didi

Java LWJGL Slick UnicodeFont 行动起来

转载 作者:搜寻专家 更新时间:2023-11-01 01:23:04 25 4
gpt4 key购买 nike

我在屏幕上显示文本时遇到了一些问题,过去我只使用了基于 Sprite 的文本,但是这次我想使用 UnicodeFont。 TrueTypeFonts 可以完美绘制,但它已被弃用。

当我尝试绘制 UnicodeFont 时,它似乎受到我使用的字符的影响。例如,如果我绘制字符串“stackoverflow”,则文本和框将绘制,如果我尝试“stackoverflowcom”,则框将不会绘制。

我的源代码的准系统版本如下。在 ~74 行我调用 uniFont.drawString(0, 0,"stackoverflow"); , 如果 com (或任何真的)框将不会被绘制。

编辑。 > 您可以使用 boolean 值 tryUnicode 在 true 和 unicode 之间切换。

我试过将它们粘贴到单独的显示列表中,但没有任何区别。

任何人都可以提供有关为什么会发生这种情况的见解吗?

谢谢


import java.awt.Font;

import org.lwjgl.LWJGLException;


import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;

import org.newdawn.slick.SlickException;
import org.newdawn.slick.TrueTypeFont;
import org.newdawn.slick.UnicodeFont;
import org.newdawn.slick.font.effects.ColorEffect;



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


public class Game {


private UnicodeFont uniFont;
private TrueTypeFont truFont;

public static void main(String[] argv) {

Game game = new Game();
game.start();
}



public void start()
{




initGL(600, 600);
initFonts();
while(!Display.isCloseRequested()) //display not closed
{
render();
Display.update();
Display.sync(60);
}
Display.destroy();
System.exit(0);

}


private void render()
{

GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT);

glPushMatrix();
glTranslatef(-0.25f,0.7f,0);
glScalef(0.001f,-0.001f,0.001f);
glEnable(GL_BLEND);
boolean tryUnicode = false;
if(tryUnicode)
{
uniFont.drawString(0, 0,"stackoverflow");
//EDIT.. glDisable texture is required here.
}else
{
glScalef(1.1f,1.1f,1f);
truFont.drawString(0, 0, "stackoverflow truFont");
}
glDisable(GL_BLEND);
glPopMatrix();

glPushMatrix();
glTranslatef(-0.25f,0,0);
glColor3f(0.5f, 0f, 0f);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(0, 0,0.0f);
glVertex3f(0.5f, 0,0f);
glVertex3f(0f,0.5f,0f);
glVertex3f(0.5f, 0.5f,0f);
glEnd();
glPopMatrix();
}


private void initGL(int width, int height) {
try {
Display.setDisplayMode(new DisplayMode(width,height));
Display.create();
//Display.setVSyncEnabled(true);
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}

glEnable(GL11.GL_TEXTURE_2D);
glShadeModel(GL11.GL_SMOOTH);
glEnable(GL11.GL_DEPTH_TEST);
glDisable(GL11.GL_LIGHTING);

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClearDepth(1);

glEnable(GL_BLEND);
glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_BLEND);
glMatrixMode(GL11.GL_PROJECTION);
glLoadIdentity();
glOrtho(-1, 1, -1, 1, -1, 1);
glMatrixMode(GL11.GL_MODELVIEW);

}


private void initFonts() {

Font awtFont = new Font("", Font.PLAIN,55);
truFont = new TrueTypeFont(awtFont, true);

uniFont = new UnicodeFont(awtFont, 128, false, false);
uniFont.addAsciiGlyphs();
uniFont.addGlyphs(400,600); // Setting the unicode Range
uniFont.getEffects().add(new ColorEffect(java.awt.Color.white));
try {
uniFont.loadGlyphs();
} catch (SlickException e) {};


}

}

最佳答案

看来我现在有这个错误,它只会在使用字体之前绘制轮廓矩形。这似乎是一个 Slick 错误 ,并且是一个主要问题,因此他们应该在添加新功能之前修复它。
唯一的解决方法是在框架上渲染字体 last

编辑: 问题解决了!

渲染字体后添加此行:

GL11.glDisable(GL11.GL_TEXTURE_2D);

Slick 的人真的应该添加该行,因为它会导致很多错误!

关于Java LWJGL Slick UnicodeFont 行动起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064804/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com