java - LibGDX sprite 批处理字体坏比例渲染

标签 java fonts libgdx scale spritebatch

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

我得到以下渲染:

font draw scale issue

你在图片上看到的是“hello”的“h”的顶部,每个像素都超大了。 相同的相机用于渲染图 block / Sprite 。

我要达到的效果是这样的:

Elliot quest example

代码如下:

    // 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() 但没有成功。

有人知道如何实现吗?

最佳答案

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

编辑:

要计算你应该绘制文本的位置,它会是这样的。假设您的世界相机称为“cam”,而您的文本相机称为“guicam”。还有一个名为“object”的游戏对象。

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);

关于java - LibGDX sprite 批处理字体坏比例渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20595558/

相关文章:

java - 基于 libGDX 的引擎 (for android)

Java\JSON : UnrecognizedPropertyException: Unrecognized field "CefMessagesGenerators" error

java - 我如何做出 if 语句,如果一个是一对,另一个不是,则不幸运,但如果两者都是一对,则幸运?

java @Autowired 返回 null。无法让 spring 工作

image - 如何使用 adobe photoshop 识别 png 图像中的字体系列

ios - 如何在 UITextview 中使用不同的字体样式但相同的字体系列呈现 HTML 字符串

fonts - Google Web字体中的 “latin”和 “latin-extended”字形支持的语言?

java - 如何让我的游戏在 libgdx 中十秒后停止?

java - 有没有办法控制位深度=1(黑白)的 TIFF-PNG 转换中哪些像素变黑(阈值)

java - 使用 libgdx 触摸滚动