glyphLayout中的targetWidth是什么

时间:2018-07-01 19:40:51

标签: libgdx bitmap-fonts

参数targetWidth在这里到底是什么意思,它与wrap参数有什么关系?

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

2 个答案:

答案 0 :(得分:0)

来自文档:

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

环绕::如果为true,则当达到边距时,(单词或文本单位)会自动结到新行,或者适合嵌入的功能。

如果为false,则文本只会在包含换行符(\ n)的位置换行。

编辑

测试代码:实际演示, targetWidth wrap 如何在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();
    }
}

输出:

enter image description here

答案 1 :(得分:0)

目标宽度是文本在被包裹,截断或以其他方式更改为单行之前的最大最大宽度。

例如考虑宽度为500的字符串(绘制时)。目标宽度为250,将以〜250的宽度将其包裹成2行(如果wrap为true)。

相关问题