自定义,可点击的字体

Custom, clickable font

我正在尝试为我的游戏制作自定义的可点击字体(对于菜单,例如:PLAY -> 转到播放屏幕),我尝试使用 FreeType,但是当我用它制作新文本时,它在 android 上使用了大量内存。你能建议我一种从 .ttf 文件创建可点击文本的正确方法吗?我是这样做的:

我有一个盒子class:

public class Box {

   protected float x;
   protected float y;
   protected float width;
   protected float height;

   public boolean contains(float x, float y) {
      return x > this.x - width / 2 &&
            x < this.x + width / 2 &&
            y > this.y - height / 2 &&
            y < this.y + height / 2;
   } 
}

然后文本 class 及其扩展框,因此当我创建新文本时,我可以调用 .contains(x,y) 以便使文本可点击:

public class Texts  extends Box{

   private String text;
   private int size;
   private float density;
   private int dpSize;
   private BitmapFont font;
   private FreeTypeFontGenerator generator;
   private FreeTypeFontParameter parameter;

   public Texts(String text, int size, float x ,float y){
      this.text = text;
      this.size = size;

      generator = new FreeTypeFontGenerator(Gdx.files.internal("myfont.ttf"));
      parameter = new FreeTypeFontParameter();


      parameter.size = size;
      dpSize = parameter.size;

      font = generator.generateFont(parameter);
      generator.dispose();

      this.x = x;
      this.y = y;
      this.width = font.getBounds(text).width;
      this.height = font.getBounds(text).height;

   }

   public void render(SpriteBatch sb){

      font.draw(sb, text, x - width / 2   , y + height /2);


   }

   public void renderNoCenter(SpriteBatch sb){

      font.draw(sb, text, x   , y);

   }

   public float getWidth(){
      return this.width;
   }

   public float getHeight(){
      return this.height;
   }

   public void setText(String text){
      this.text = text;
   }

   public void setXY(float x, float y){
      this.x = x;
      this.y = y;
   }

   public void update(float dt){

   }

   public int getDpSize(){
      return dpSize;
   }

   public void dispose(){
      font.dispose();
   }

}

但是当我创建这样的新文本时,应用程序消耗 + 12mb 内存/文本:

Texts play = new Texts("PLAY", 200, 200, 80);
Texts options= new Texts("OPTIONS", 200, 200, 20);

这就是我的问题,感谢您的帮助!

生成 200 像素的字体会用相当大的位图字体字形页面填满您的显存。如果您使用许多不同的字体类型 and/or 比例(或只是一种大比例字体),您可能需要研究实现距离场字体。看看这个答案:How to draw smooth text in libgdx?

另一种选择是创建图像并使用 Scene2d ImageButton 代替可点击的文本。