7

我在尝试将文本/对话系统放入我的游戏项目时遇到问题。当我创建一个字体并通过相机更新的 spriteBatch 调用它的 draw 方法时,字体的每个像素都具有一个精灵的相同尺寸。

我得到以下渲染:

字体绘制比例问题

您可以在图片中看到“hello”的“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();

我试过使用font.setScale()没有成功。

有人知道如何实现这一目标吗?

4

2 回答 2

7

创建具有更大视口的相机(例如您的测试设备的像素完美)。并用它来渲染你的字体。也不要在每次渲染时创建新字体,在开始时创建并使用它。

编辑:

要计算你应该绘制文本的位置,它会是这样的。假设您的世界相机称为“cam”,而您的文本相机称为“guicam”。还有一个叫做“object”的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);
于 2013-12-15T15:49:06.317 回答
-1

您可以尝试Texture.TextureFilter.Linear使用最小和最大过滤器。

Libgdx AssetManager 加载带有所需过滤器的位图字体:

BitmapFontLoader.BitmapFontParameter param = new BitmapFontLoader.BitmapFontParameter();
param.maxFilter = Texture.TextureFilter.Linear;
param.minFilter = Texture.TextureFilter.Linear;
assetManager.load(fileName, BitmapFont.class, param);
于 2013-12-16T07:07:49.820 回答