저는 현재 libgdx의 FreeTypeFontGenerator로 많은 어려움을 겪고 있습니다.
내 코드는 다음과 같습니다.
public class FontTestScreen extends ScreenAdapter {
private static final float WORLD_HEIGHT = 100;
private static final int FONT_SIZE = (int) (WORLD_HEIGHT/10);
private Viewport viewport;
private SpriteBatch batch;
private FreeTypeFontGenerator fontGenerator;
private BitmapFont font;
public FontTestScreen() {
fontGenerator = new FreeTypeFontGenerator(Gdx.files.internal("calibri.ttf"));
batch = new SpriteBatch();
/* Setting the viewport */
viewport = new ExtendViewport(0, WORLD_HEIGHT);
/* BitmapFont */
FreeTypeFontGenerator.FreeTypeFontParameter parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
parameter.size = FONT_SIZE;
parameter.color = Color.BLACK;
font = fontGenerator.generateFont(parameter);
}
@Override
public void resize(int width, int height) {
viewport.update(width, height, true);
batch.setProjectionMatrix(viewport.getCamera().combined);
}
@Override
public void render(float delta) {
Gdx.gl.glClearColor(1, 1, 1, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
font.draw(batch, "Hello", WORLD_HEIGHT/2, WORLD_HEIGHT/2);
batch.end();
}
}
내 문제는 다음과 같습니다. 뷰포트 철학을 올바르게 이해했다면 픽셀 개념을 제거해야합니다. 내 세계에 단위에 대한 미터가 있다면 픽셀로 생각하는 대신 뷰포트를 사용하여 세계 좌표를 설정해야합니다. 내 예에서 내 세계는 100 미터 높이 일 것입니다. 크기가 10 미터 인 텍스트를 인쇄하고 싶습니다. 문제는 텍스트가 실제로 픽셀 화되어 읽을 수 없다는 것입니다. world_height를 10 대신 1000으로 변경하고 10 대신 100 크기로 텍스트를 인쇄하려고하면 텍스트가 더 이상 픽셀 화되지 않습니다. 이 동작은 텍스처에서는 발생하지 않습니다! 비율 만 중요해야 할 때 왜 그 문제로 고투해야합니까?
내가 찾은 더 논리적 인 대답은 내가 잘못하고 있다는 것입니다. 따라서 올바른 글꼴 처리 방법을 이해하도록 도와주세요.
뷰포트는 미터 (또는 기타) 단위입니다. 그러나 FreeTypeFontGenerator는 글꼴을 만들기 위해 픽셀을 비트 맵으로 그리기 때문에 픽셀을 사용합니다. 따라서 원하는 글꼴 높이의 픽셀 수를 사용하십시오.
귀하의 경우 글꼴이 화면 높이의 1/10이되기를 원하기 때문에 :
private static final float FONT_SCREEN_HEIGHT_FRACTION = 1/10f;
//...
parameter.size = (int)(FONT_SCREEN_HEIGHT_FRACTION * Gdx.graphics.getHeight());
그런 다음 결과 글꼴의 크기를 조정하여 픽셀 단위가 아닌 표준 단위가되도록합니다.
font = fontGenerator.generateFont(parameter);
font.getData().setScale(WORLD_HEIGHT / Gdx.graphics.getHeight());
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다