我担心没有默认机制来制作下标或上标,但在使用Scene2d及其Label类时似乎很简单.
我们的想法是使用您的文本(例如某些数字)呈现标准标签,然后使用下标或上标文本计算并添加到标签的较小版本.代码看起来像:
Label label = new Label("2", skin, "default");
Label subscript = new Label("n", skin, "smaller");
subscript.setPosition(label.getX() + label.getWidth() + xLittleOffset, label.getY() + yOffset);
Run Code Online (Sandbox Code Playgroud)
如果你不想持有Label的两种样式,你可以创建下标作为它的默认版本,只需应用一些比例.
Label subscript = new Label("n", skin, "default");
subscript.setFontScale(0.5f);
...
Run Code Online (Sandbox Code Playgroud)
当然可以不使用Scene2d而是简单的批量渲染来实现它,只需在正常情况下渲染较小的文本,使用一些y轴偏移
draw(Batch batch, java.lang.CharSequence str, float x, float y, float targetWidth, int halign, boolean wrap)
Run Code Online (Sandbox Code Playgroud)
绘图功能的版本.代码如下:
BitmapFont font = createTheFont(); // here you are creating the font
//...
//in your render function:
batch.begin();
font.draw(batch, "2", x, y, width, halign, false);
font.setScale(.2f);
font.draw(batch, "n", x + width, y + someOffset, n_width, halign, false);
batch.end();
Run Code Online (Sandbox Code Playgroud)
如果你需要在 Label或文本中渲染下标/上标,那将会有点困难但并非不可能 - 你需要做的就是以某种方式计算你的字形的位置,并为它增加一些原始空间留一点空间.
计算字形位置相当困难,但您可以迭代Label GlyphRuns及其xAdvances值(左侧偏移量).根据以下内容尝试自己弄清楚:
float x, y; //positions of glyph after which you want to add subscipt/superscript
for(GlyphRun run : label.getGlyphLayout().runs)
{
for(int i = 0; i < run.xAdvances.size - 1; i++)
{
x += run.xAdvances.get(i));
}
//now you are after run so you can modify y position
y += rowHeight; //I'm not sure but it probably should be that rowHeight = label.getStyle().font.getLineHeight();
}
Run Code Online (Sandbox Code Playgroud)
查看本文以了解有关新Libgdx版本中字形,字体等的更多信息
不幸的是,我不知道如何在使用批处理时实现它
你可以在这里阅读更多关于Scene2d的信息:https://github.com/libgdx/libgdx/wiki/Scene2d
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |