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