Ale*_*DET 6 java fonts scale libgdx spritebatch
在尝试将文本/对话框系统放入我的游戏项目时,我遇到了一个问题.当我创建一个字体并在其上调用draw方法传递相机更新的spriteBatch时,该字体的每个像素都具有一个sprite的相同维度.
我得到以下渲染:
您可以在图片上看到的是每个像素超大的"你好"的"h"的顶部.相同的相机用于渲染瓷砖/精灵.
我想要实现的效果类似于:
这是代码:
// 15 * 12 tile size
camera = new OrthographicCamera(Const.VIEWPORT_WIDTH, Const.VIEWPORT_HEIGHT);
BitmapFont font = new BitmapFont(Gdx.files.internal("data/fonts/myfont.fnt"));
// ....
// p => player position
camera.position.x = p.getX();
camera.position.y = p.getY();
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
font.draw(batch, "hello", p.getX(), p.getY());
batch.end();
Run Code Online (Sandbox Code Playgroud)
我尝试过使用但font.setScale()
没有成功.
有人知道如何实现这一目标吗?
创建具有更大视口的相机(例如,完美的测试设备的像素).并用它来渲染你的字体.另外,不要在每个渲染中创建新字体,在开头创建它并使用它.
编辑:
要计算你应该绘制文本的位置,它就像这样.让我们假设您的世界相机被称为"凸轮",您的文本相机被称为"guicam".GameObject称为"对象".
ratew = guicam.viewportWidth/cam.viewportWidth; //<--- you should calculate these 2 only once.
rateh = guicam.viewportHeight/cam.viewportHeight;
x = guicam.position.x-(cam.position.x-object.position.x)*ratew;
y = guicam.position.y-(cam.position.y-object.position.y)*rateh;
font.draw(batch, "stuff", x, y);
Run Code Online (Sandbox Code Playgroud)