nanshaws/LibgdxTutorial

关于中文字符的一些问题

Opened this issue · 4 comments

public class MyGdxGame extends ApplicationAdapter {

SpriteBatch batch;

//生产
FreeTypeFontGenerator generator;

//使用
FreeTypeFontGenerator.FreeTypeFontParameter parameter;

BitmapFont font;


@Override
public void create() {

    batch = new SpriteBatch();
    generator = new FreeTypeFontGenerator(Gdx.files.internal("ZiHunJianQiShouShu(ShangYongXuShouQuan)-2.ttf"));

    parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 25;
    parameter.characters = "我是你爹";


    font = generator.generateFont(parameter);


    font.setColor(Color.RED);

}

@Override
public void render() {

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    font.draw(batch, "我是你爹", 100, 100);

    batch.end();
}

@Override
public void dispose() {
    batch.dispose();
    generator.dispose();
    font.dispose();
}

}
其中font.draw(batch, "我是你爹", 100, 100);的我是你爹和
parameter.characters = "我是你爹";意义上有何不同public class MyGdxGame extends ApplicationAdapter {

SpriteBatch batch;

//生产
FreeTypeFontGenerator generator;

//使用
FreeTypeFontGenerator.FreeTypeFontParameter parameter;

BitmapFont font;


@Override
public void create() {

    batch = new SpriteBatch();
    generator = new FreeTypeFontGenerator(Gdx.files.internal("ZiHunJianQiShouShu(ShangYongXuShouQuan)-2.ttf"));

    parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 25;
    parameter.characters = "我是你爹";


    font = generator.generateFont(parameter);


    font.setColor(Color.RED);

}

@Override
public void render() {

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    font.draw(batch, "我是你爹", 100, 100);

    batch.end();
}

@Override
public void dispose() {
    batch.dispose();
    generator.dispose();
    font.dispose();
}

}
其中font.draw(batch, "我是你爹", 100, 100);的我是你爹和
parameter.characters = "我是你爹";意义上有何不同

给人一种很别扭的感觉我 font.draw(batch, "我是你爹", 100, 100);的时候,如果parameter.characters = "我是你爹";没有对应的字符就不行,同样ttf文件里面没有对应字符也不行!给我的感觉就是为什么不直接指定ttf里面的字符?有的parameter.characters = "我是你爹"很多余的感觉

不知道是不是我写的有问题

public class MyGdxGame extends ApplicationAdapter {

SpriteBatch batch;

//生产
FreeTypeFontGenerator generator;

//使用
FreeTypeFontGenerator.FreeTypeFontParameter parameter;

BitmapFont font;


@Override
public void create() {

    batch = new SpriteBatch();
    generator = new FreeTypeFontGenerator(Gdx.files.internal("ZiHunJianQiShouShu(ShangYongXuShouQuan)-2.ttf"));

    parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 25;
    parameter.characters = "我是你爹";


    font = generator.generateFont(parameter);


    font.setColor(Color.RED);

}

@Override
public void render() {

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    font.draw(batch, "我是你爹", 100, 100);

    batch.end();
}

@Override
public void dispose() {
    batch.dispose();
    generator.dispose();
    font.dispose();
}

} 其中font.draw(batch, "我是你爹", 100, 100);的我是你爹和 parameter.characters = "我是你爹";意义上有何不同public class MyGdxGame extends ApplicationAdapter {

SpriteBatch batch;

//生产
FreeTypeFontGenerator generator;

//使用
FreeTypeFontGenerator.FreeTypeFontParameter parameter;

BitmapFont font;


@Override
public void create() {

    batch = new SpriteBatch();
    generator = new FreeTypeFontGenerator(Gdx.files.internal("ZiHunJianQiShouShu(ShangYongXuShouQuan)-2.ttf"));

    parameter = new FreeTypeFontGenerator.FreeTypeFontParameter();
    parameter.size = 25;
    parameter.characters = "我是你爹";


    font = generator.generateFont(parameter);


    font.setColor(Color.RED);

}

@Override
public void render() {

    Gdx.gl.glClearColor(1, 1, 1, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    batch.begin();

    font.draw(batch, "我是你爹", 100, 100);

    batch.end();
}

@Override
public void dispose() {
    batch.dispose();
    generator.dispose();
    font.dispose();
}

} 其中font.draw(batch, "我是你爹", 100, 100);的我是你爹和 parameter.characters = "我是你爹";意义上有何不同

parameter.characters = "我是你爹";:

  • 这一行代码的作用是指定生成字体时需要包含的字符集。
  • 当使用 FreeTypeFontGenerator 生成字体时,这个参数告诉生成器仅需要处理并生成这些字符的位图,因此优化了内存和性能,因为不需要生成整个字符集。
  • 这样做是为了确保程序中使用的特定字符确实在生成的字体中有相应的位图。
  1. font.draw(batch, "我是你爹", 100, 100);:
  • 这一行代码实际是在屏幕上绘制文本 "我是你爹"。
  • font.draw() 方法使用生成的 BitmapFont 对象在指定的坐标位置 (100, 100) 绘制出字符串。
  • 这里的字符串是实际需要在应用程序界面上显示的内容。

给人一种很别扭的感觉我 font.draw(batch, "我是你爹", 100, 100);的时候,如果parameter.characters = "我是你爹";没有对应的字符就不行,同样ttf文件里面没有对应字符也不行!给我的感觉就是为什么不直接指定ttf里面的字符?有的parameter.characters = "我是你爹"很多余的感觉

可以开启增量模式,开启后不需要指定初始化字符。还有另外一种方式是使用懒加载的BitmapFont