2

I'm experimenting with TextField and having problems with it when flipping the font. My orthographic camera is set to yDown = true. With that settings, the text is flipped so I came up with a solution to set BitmapFont's flip constructor parameter to true. But then when I try the code below. The text "Hello World" is rendering outside it's ninepatch borders. Here's a screenshot of it:

screenshot

    TextFieldStyle tfs = new TextFieldStyle();
    NinePatch np = new NinePatch(new Texture(Gdx.files.internal(ResourceConstants.IMAGE_NINEPATCH)), 8, 8, 8, 8);

    tfs.font = new BitmapFont(true);
    tfs.fontColor = Color.BLACK;
    tfs.background = np;

    TextField tf = new TextField("Hello World", tfs);
    tf.x = 50;
    tf.y = 90;
    tf.width = 100;
    tf.height = 32;
    addActor(tf);
    tf.pack();
4

2 回答 2

0

问题在于在 tfs 上调用 draw 的方法(这是设置坐标的位置)。我认为字体的笛卡尔 y 坐标与其他 GDX 对象相反,因为排版需要以某种方式工作。

所以如果你打电话

myFont.draw(spriteBatch, "Hello World", 0, 0);

然后你会期望消息被绘制在左下角。但这是错误的!字体本身是从左上角绘制的,因此您的消息将绘制在屏幕的左下角,底部边缘下方。我们甚至无法看到消息。

但是如果我们改变坐标:

myfont.draw(spriteBatch, "box2d x: " + String.format("%2.2f", x), 10, 20);

我们将看到该消息,因为我们在负 y 方向上为它提供了足够的空间来显示。

鉴于行为不端的字体在 Y 方向上表现不佳,并且呈现在您期望的下方,我怀疑上述误解确实是问题所在。

如果您不控制位图字体本身的任何绘图坐标,并且这仅由 TextField 类处理,并且无论您的文本字段大小如何,字体总是超出范围,那么我会怀疑一个错误在 GDX 中。您可以尝试向论坛询问。

于 2013-07-15T08:02:11.873 回答
0

我也有同样的效果。如果添加TextField, 和之后,例如,CheckBox为此小部件集 setScale 添加 and ,那么您将看到此效果

TextField textfield = new TextField("Text field",skin);
stage.addActor(textfield);

CheckBoxStyle checkBoxStyle = skin.get(CheckBoxStyle.class);
checkBoxStyle.font.getData().setScale(2f);

CheckBox checkbox = new CheckBox("CheckBox", checkBoxStyle);
stage.addActor(checkbox);
于 2016-07-15T07:33:07.563 回答