【问题标题】:libGDX: Textfield with BitmapFont(true) renders the text outside the borderslibGDX:带有 BitmapFont(true) 的文本字段将文本呈现在边框之外
【发布时间】:2012-12-27 11:14:55
【问题描述】:

我正在尝试使用 TextField 并在翻转字体时遇到问题。我的正交相机设置为 yDown = true。使用该设置,文本被翻转,所以我想出了一个解决方案,将 BitmapFont 的翻转构造函数参数设置为 true。但是当我尝试下面的代码时。文本“Hello World”正在渲染到它的 Ninepatch 边界之外。这是其中的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();

【问题讨论】:

    标签: java libgdx textfield


    【解决方案1】:

    问题在于在 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 方向上表现不佳,并且在您期望的位置呈现 below,我怀疑上述误解确实是问题所在。

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

    【讨论】:

      【解决方案2】:

      我也有同样的效果。如果你添加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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-03
        • 1970-01-01
        • 2017-09-06
        • 2014-04-21
        • 2017-06-25
        • 1970-01-01
        相关资源
        最近更新 更多