0

参数targetWidth在这里的确切含义是什么以及它与wrap参数有什么关系?

public GlyphLayout (BitmapFont font, CharSequence str, Color color, float targetWidth, int halign, boolean wrap) {
    setText(font, str, color, targetWidth, halign, wrap);
}
4

2 回答 2

2

来自文档:

targetWidth :用于对齐、换行和截断的宽度。如果不使用这些功能,则可能为零。

wrap :如果为真,那么(一个单词或文本单元)将在到达边距时自动转移到新行,或适应嵌入的特征。

如果为 false,则文本将仅在包含换行符 (\n) 的地方换行。

编辑

测试代码:实际演示,targetWidthwrap如何在GlyphLayout构造函数中工作。

public class MyGdxGame extends ApplicationAdapter {

    private GlyphLayout glyphLayout[];
    private BitmapFont bitmapFont;
    private float targetWidth=250;
    private ShapeRenderer shapeRenderer;
    private SpriteBatch spriteBatch;
    private float xPos[]={450,450,450,30,450,880};
    private float yPos[]={550,480,410,340,340,340};

    @Override
    public void create () {
        spriteBatch=new SpriteBatch();
        shapeRenderer=new ShapeRenderer();
        shapeRenderer.setAutoShapeType(true);
        bitmapFont=new BitmapFont(Gdx.files.internal("skin/poet.fnt"));

        glyphLayout=new GlyphLayout[6];
        glyphLayout[0]=new GlyphLayout(bitmapFont, "LOADING SCREENsssssssssssssssssssssssssssssssssssss", Color.BLACK, targetWidth, Align.left, false);
        glyphLayout[1]=new GlyphLayout(bitmapFont, "LOADING SCREENsssssssssssssssssssssssssssssssssssss", Color.BLACK, targetWidth, Align.right, false);
        glyphLayout[2]=new GlyphLayout(bitmapFont, "LOADING SCREENsssssssssssssssssssssssssssssssssssss", Color.BLACK, targetWidth, Align.center, false);
        glyphLayout[3]=new GlyphLayout(bitmapFont, "LOADING SCREENsssssssssssssssssssssssssssssssssssss", Color.BLACK, targetWidth, Align.left, true);
        glyphLayout[4]=new GlyphLayout(bitmapFont, "LOADING SCREENsssssssssssssssssssssssssssssssssssss", Color.BLACK, targetWidth, Align.right, true);
        glyphLayout[5]=new GlyphLayout(bitmapFont, "LOADING SCREENsssssssssssssssssssssssssssssssssssss", Color.BLACK, targetWidth, Align.center, true);
    }

    @Override
    public void render() {
        Gdx.gl.glClearColor(1f, 0f, 0f, 1f);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        spriteBatch.begin();
        for (int i=0;i<glyphLayout.length;i++) {
            bitmapFont.draw(spriteBatch, glyphLayout[i], xPos[i], yPos[i]);
        }
        spriteBatch.end();

        shapeRenderer.begin();
        shapeRenderer.setColor(Color.BLUE);
        shapeRenderer.set(ShapeRenderer.ShapeType.Filled);
        for (int i=0;i<glyphLayout.length;i++) {
                shapeRenderer.rectLine(xPos[i], yPos[i], xPos[i] + targetWidth, yPos[i], 3f);
        }
        shapeRenderer.end();
    }

    @Override
    public void dispose () {
        bitmapFont.dispose();
        shapeRenderer.dispose();
        spriteBatch.dispose();
    }
}

输出 :

在此处输入图像描述

于 2018-07-02T05:25:59.083 回答
0

目标宽度是文本在被换行、截断或以其他方式从单行更改之前的最大宽度。

例如,考虑一个宽度为 500 的字符串(绘制时)。目标宽度为 250,它将在 ~250 处被包裹成 2 行(如果 wrap 为真)。

于 2018-07-07T14:50:59.083 回答