libGDX:带有BitmapFont的文本字段(true)将文本呈现在边框之外

时间:2012-12-27 11:14:55

标签: java libgdx textfield

我正在尝试使用TextField,并在翻转字体时遇到问题。我的正交相机设置为yDown = true。使用该设置,文本被翻转,因此我想出了一个将BitmapFont的翻转构造函数参数设置为true的解决方案。但是当我尝试下面的代码时。文本“Hello World”正在渲染九个边界之外。这是screenshot

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

2 个答案:

答案 0 :(得分:0)

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

所以如果你打电话

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

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

但是如果我们改变坐标:

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

我们会看到这条消息,因为我们已经在负y方向给出了足够的空间来显示。

鉴于行为不端的字体在Y方向行为不端,并且低于,你怀疑它在哪里,我怀疑上述误解确实是问题所在。

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

答案 1 :(得分:0)

我有同样的效果。如果您添加TextField,之后添加CheckBox,并为此窗口小部件设置setScale,那么您将看到此效果

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