自定义,可点击的字体

时间:2015-01-12 14:03:31

标签: java android fonts libgdx freetype

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

我有一个Box类:

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;
   } 
}

然后Texts类及其扩展框,所以当我创建一个新文本时,我可以调用.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 RAM /文本:

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

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

1 个答案:

答案 0 :(得分:1)

生成200像素的字体会使用相当大的位图字体字形填充你的视频内存。如果您使用许多不同的字体类型和/或比例(或只是一个大的缩放字体),您可能需要考虑实现距离字段字体。看看这个答案:How to draw smooth text in libgdx?

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