【问题标题】:LibGDX label draws letters with a black backgroundLibGDX 标签绘制黑色背景的字母
【发布时间】:2015-07-15 20:15:10
【问题描述】:

我最近开始开发 LibGDX 应用程序,目前正在开发 GUI。但是,我遇到了与 Scene2D 中的标签有关的问题。 下面的图片应该说一千个字:

如您所见,“Score”一词已显示,但每个字符的黑色背景与后面的不一致。

标签本身包含在浅灰色表格中,该表格位于另一个包含上部元素的表格中。该表位于主表内。

最初,我认为背景与 GLClearColor 相关,但经过测试,我发现并非如此 - 红色 GLClearColor 仍会产生黑色背景。此外,我检查了表格的颜色是否包含 1 的 alpha 值,我尝试更改字体、更改字体颜色以及缩放比例。我现在已经没有想法了。

以下是与标签相关的代码摘录:

private Label score;

score = new Label("Score:", skin);
score.setFontScale(3);

然后将标签添加到'scoreTable'中:

scoreTable.add(score).expand().fill();
scoreTable.pack();

皮肤在'uiskin.json'中定义如下:

// @formatter:off
{
    com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: homestile.fnt } },
    com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
        default: { down: default-round-down, up: default-round, font: default-font},
    },
    com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
        default:  {
            titleFont: default-font
        }
    },
    "com.badlogic.gdx.graphics.Color": {
        "white": { "r": 1, "g": 1, "b": 1, "a": 1},
        "black": { "r": 0, "g": 0, "b": 0, "a": 1},
    },
    com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
        default: { font: default-font, fontColor: white }
    }
}

任何人都可以对这个问题有所了解吗?

编辑:这里是字体文件:

http://i.stack.imgur.com/xDmL1.png (请注意,这是一种白色字体,所以当有白色背景时查看它会使它看起来不可见。相信我,它就在那里)

https://drive.google.com/file/d/0B9Xrus17wYbNUXlOVHFKX2YybjQ/view?usp=sharing

【问题讨论】:

  • 你能告诉我们BitmapFont中使用的位图吗?我知道字体支持不同的“亮度”值,如果实际字体中有黑色轮廓可能是问题。
  • 看起来如果关闭混合会看起来,但 Stage 不应该正常这样做。我猜您用于字体的图像文件缺少 Alpha 通道。
  • 你去 - 查看编辑
  • 我似乎很清楚 alpha 通道被忽略了。字体图像文件有一个,所以我想知道是否是显示像素格式的问题。问题:这发生在所有设备上还是仅在某些设备上?如果有的话,是哪个?如果它发生在桌面上,您是否在 DesktopLauncher 中做过任何不寻常的事情?
  • 刚刚检查了几台安卓设备,问题依然存在。使用的启动器只是默认值。

标签: java libgdx


【解决方案1】:

在代码中搜索“混合”后,我找到了答案。看来代码中的其他地方,我称之为:

batch.enableBlending();
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);
Gdx.gl.glEnable(GL20.GL_BLEND);
batch.draw(texture,this.getX(),getY());
Gdx.gl.glDisable(GL20.GL_BLEND);
batch.disableBlending();

当这些行被删除(即Gdx.gl.glDisable(GL20.GL_BLEND);)时,问题得到解决并且文本正确呈现。我假设该阶段默认启用它,但它似乎依赖于 LibGDX 中 GL_BLEND 的初始状态。经验教训。

【讨论】:

    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多