libgdx 不同规格字体BitmapFont

libgdx写游戏需要不同大小的字体。 每个BitmapFont需要对应的TextrueRegion,不能一个TextureRegion纹理创建多个不同大小的BitmapFont,否则容易乱。

package dy.android.cike.util;

import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import df.util.Util;
import df.util.engine.gdx.GdxFile;

import java.util.HashMap;
import java.util.Map;

/**
 * Created by andrew on 14-6-23.
 */
public class FontUtil {
    private static final String TAG = Util.toTAG(FontUtil.class);

    public static final int CHAR_HEIGHT_16 = 16;
    public static final int CHAR_HEIGHT_20 = 20;
    public static final int CHAR_HEIGHT_26 = 26;
    public static final int CHAR_HEIGHT_30 = 30;
    public static final int CHAR_HEIGHT_34 = 34;

    private String[] fontArray = new String[]{
            "font/minijianyihei1.png",
            "font/minijianyihei2.png",
            "font/minijianyihei3.png",
            "font/minijianyihei4.png",
            "font/minijianyihei5.png",
            "font/minijianyihei6.png",
            "font/minijianyihei7.png",
            "font/minijianyihei8.png",

    };

    private Map<Integer, BitmapFont> fontMap = new HashMap<Integer, BitmapFont>();
    private static FontUtil instance;

    private FontUtil() {

    }

    private BitmapFont font(int characterHeight, Color color) {
        if (!fontMap.containsKey(characterHeight)) {
            //todo: wulong 每个型号字体必须重新创建对应的纹理,缩放会出问题。
            BitmapFont.BitmapFontData data = new BitmapFont.BitmapFontData(GdxFile.internal("font/minijianyihei.fnt"), false);
            TextureRegion[] regionArray = new TextureRegion[fontArray.length];

            for (int i = 0; i < fontArray.length; i++) {
                FileHandle picHandle = GdxFile.internal(fontArray[i]);
                regionArray[i] = new TextureRegion(new Texture(picHandle));
            }

            data.imagePaths = fontArray;

            BitmapFont font = new BitmapFont(data, regionArray, true);
            font.setScale((float)characterHeight / font.getXHeight());
            fontMap.put(characterHeight, font);
        }

        fontMap.get(characterHeight).setColor(color);

        return fontMap.get(characterHeight);
    }

    public static BitmapFont getFont(int characterHeight,Color color){
        if (null == instance) {
            instance = new FontUtil();
        }

        return instance.font(characterHeight, color);
    }
}

使用方法:

BitmapFont font = FontUtil.getFont(FontUtil.CHAR_HEIGHT_16, Color.BLACK);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值