LibGDX 标签用黑色背景绘制字母
LibGDX label draws letters with a black background
我最近开始开发 LibGDX 应用程序,目前正在开发 GUI。但是,我遇到了与 Scene2D 中的标签相关的问题。
下图应该说一千个字:
如您所见,显示了单词 'Score',但它的每个字符的黑色背景与后面的不一致。
标签本身包含在浅灰色 table 中,后者位于另一个 table 中,上面有元素。此 table 位于主 table 内。
最初,我认为背景与 GLClearColor 有关,但是通过测试,我发现它不是 - 红色 GLClearColor 仍然产生黑色背景。此外,我检查过 table 的颜色是否包含 alpha 值 1,我尝试更改字体、更改字体颜色以及缩放比例。我现在 运行 没主意了。
以下是与标签相关的代码摘录:
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
在代码中搜索'blend'后,找到了答案。似乎在代码的其他地方,我称之为:
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);
),问题得到解决并且文本呈现正确。我假设该阶段会默认启用它,但它似乎依赖于 GL_BLEND
的初始状态,在 LibGDX 内。吸取教训。
我最近开始开发 LibGDX 应用程序,目前正在开发 GUI。但是,我遇到了与 Scene2D 中的标签相关的问题。 下图应该说一千个字:
如您所见,显示了单词 'Score',但它的每个字符的黑色背景与后面的不一致。
标签本身包含在浅灰色 table 中,后者位于另一个 table 中,上面有元素。此 table 位于主 table 内。
最初,我认为背景与 GLClearColor 有关,但是通过测试,我发现它不是 - 红色 GLClearColor 仍然产生黑色背景。此外,我检查过 table 的颜色是否包含 alpha 值 1,我尝试更改字体、更改字体颜色以及缩放比例。我现在 运行 没主意了。
以下是与标签相关的代码摘录:
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
在代码中搜索'blend'后,找到了答案。似乎在代码的其他地方,我称之为:
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);
),问题得到解决并且文本呈现正确。我假设该阶段会默认启用它,但它似乎依赖于 GL_BLEND
的初始状态,在 LibGDX 内。吸取教训。